Mysql check、optimize和analyze作用

optimize、Analyze、check、repair维护操作

l optimize 数据在插入,更新,删除的时候难免一些数据迁移,分页,之后就出现一些碎片,久而久之碎片积累起来影响性能,这就需要DBA定期的优化数据库减少碎片,这就通过optimize命令。

如对MyisAM表操作:optimize table 表名

对于InnoDB表是不支持optimize操作,否则提示“Table does not support optimize, doing recreate + analyze instead”,当然也可以通过命令:alter table one type=innodb; 来替代。

l Analyze 用来分析和存储表的关键字的分布,使得系统获得准确的统计信息,影响 SQL 的执行计划的生成。对于数据基本没有发生变化的表,是不需要经常进行表分析的。但是如果表的数据量变化很明显,用户感觉实际的执行计划和预期的执行计划不 同的时候,执行一次表分析可能有助于产生预期的执行计划。

Analyze table 表名

l Check检查表或者视图是否存在错误,对 MyISAM 和 InnoDB 存储引擎的表有作用。对于 MyISAM 存储引擎的表进行表检查,也会同时更新关键字统计数据

l Repair optimize需要有足够的硬盘空间,否则可能会破坏表,导致不能操作,那就要用上repair,注意INNODB不支持repair操作

myisam表修复---check/repair


 -------CHECK

 在检查、修复表,除了用myisamchk,还可以用check table、repair table来完成,下面来总结下

1.检查表是否有错误
CHECK TABLE对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计信息会被更新,CHECK TABLE也可以检查视图是否有错误,
比如在视图定义中被引用的表已不存在。

 

一些只对myisam表有作用(对innodb和视图无效)的选项介绍:
QUICK:不扫描行,不检查错误的链接。
FAST:只检查没有被正确关闭的表。
CHANGED:只检查自上次检查后被更改的表,和没有被正确关闭的表。
MEDIUM:扫描行,以验证被删除的链接是有效的。也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。
EXTENDED:对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间较长,所以很少使用。

常用的全面常规检查

mysql> check table t1 medium;
等价
# myisamchk --medium-check tablename

快速检查没有被正确关闭的表
mysql> check table t1 quick fast;


 -------REPAIR

语法如下:
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE    tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] 用于修复被破坏的表

 

quick:repair只修复索引,等价于“myisamchk --recover --quick tablename”
extended:MySQL会一行一行地创建索引行,等价于”myisamchk --safe-recover tablename“
use_frm:如果.MYI索引文件缺失或标题被破坏,则使用此选项,用来自.frm文件重新创建.MYI文件。这种修复不能使用myisamchk来完成;在repair常规无法完成时,才会使用这个选项,如果表被压缩不能使用。

no_write_to_binlog:repair默认是写到二进制文件的,如果有主从模式的话,repair也会在从库执行;使用此选项将会禁止写入到二进制文件中。


-----OPTIMIZE

OPTIMIZE TABLE `table_name` 优化表

OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,

使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)。

------Analyze

定期分析表
 
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]
 
本语句用于分析和存储表的关键字分布。在分析期间,使用一个读取锁定对表进行锁定。
这对于MyISAM, BDB和InnoDB表有作用。对于MyISAM表,本语句与使用myisamchk -a相当。
 
MySQL使用已存储的关键字分布来决定,当您对除常数以外的对象执行联合时,表按什么顺序进行联合。 
mysql> analyze table a;


(自己看了网上材料整理的)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值