+
80
-

mysql分析表 检查表 和优化表有什么不同?

mysql分析表 检查表 和优化表有什么不同?

网友回复

+
0
-

分析表主要是分析关键字的部分,检查表主要是检查表是否存在错误, 优化表则是消除删除或更新造成的空间浪费。

1.分析表 analyze table mysql 提供了 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

我知道答案,我要回答