分析表主要是分析关键字的部分,检查表主要是检查表是否存在错误, 优化表则是消除删除或更新造成的空间浪费。
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
网友回复
如何编写一个chrome插件实现多线程高速下载大文件?
cdn版本的vue在网页中出现typeerror错误无法找到错误代码位置怎么办?
pywebview能否使用webrtc远程控制共享桌面和摄像头?
pywebview6.0如何让窗体接受拖拽文件获取真实的文件路径?
如何在linux系统中同时能安装运行apk的安卓应用?
python有没有离线验证码识别ocr库?
各家的ai图生视频及文生视频的api价格谁最便宜?
openai、gemini、qwen3-vl、Doubao-Seed-1.6在ui截图视觉定位这款哪家更强更准?
如何在linux上创建一个沙箱隔离的目录让python使用?
pywebview如何使用浏览器自带语音识别与webspeech 的api?