分析表主要是分析关键字的部分,检查表主要是检查表是否存在错误, 优化表则是消除删除或更新造成的空间浪费。
1.分析表 analyze tablemysql 提供了 analyze table语句分析表,analyze table 语句基本语法如下:
analyze [local | no_write_to_binlog] table table_name
local 关键字是 no_write_to_binlog 的别名,二者都是执行过程不写入二进制日志,这里表名可以有多个, 注意使用analyze table分析表的过程中,数据库系统会对表添加只读锁, 也就是在分析过程中只能读取表中记录,而不能更新和插入记录,该操作能分析 InnoDB,BDB,和 MyISAM表。
analyze local table out_crm_user_day;
分析表其实真正要做的是对表的cardinality(散列程度)进行统计更新,因为它决定是否走索引,如果cardinality和实际数据严重不符,会导致索引失效。
show index from out_crm_user_day;
分析表其实就是让上图中的cardinality比较准确
2.检查表check table
数据库经常可能遇到错误,比如数据写入磁盘时发生错误,或是索引没有同步更新,或者数据库未关闭mysql就停止了。遇到这些情况,数据库有可能发生错误:incorrect key file for table:''. try to repair it
此时我们可以使用 check table来检查表及其对应的索引, check table语句能够检查InnoDB和MyISAM类型的表,对于MyISAM类型的表,check table语句还会更新关键字统计信息,而且check table也可以检查视图的错误,比如在视图中定义的表不存在了
语法:
check table table_name [,table_name] [option]
option={quick | fast | medium | extended | changed }
quick: 不扫描行,不检查错误的连接
fast: 只检查没有正确关闭的表
changed: 只检查上次检查后的被更改的表和没有正确关闭的表
medium: 扫描行,以验证被删除的连接是有效的,也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。
extended: 对每行的所有关键字进行一个全面的关键字查找,可以确保表是100%一致的,但花费时间较长。
注意: option 只对MyISAM类型表有效,对InnoDB表无效,而且check table在执行过程中也会给表添加只读锁
3. 优化表 optimize table
mysql使用optimize table 语句来优化表,该语句对InnoDB和MyISAM类型的表都有效,但是该语句只能优化表中的varchar, blob或text类型的字段optimize [local | no_write_to_binlog] table table_name
local是 no_write_to_binlog的同义词,意思是不写入二进制日志,该操作也会读表添加只读锁。
参考:https://blog.csdn.net/aichogn/article/details/118147498
网友回复