分析表主要是分析关键字的部分,检查表主要是检查表是否存在错误, 优化表则是消除删除或更新造成的空间浪费。
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
网友回复
python如何实现torrent的服务端进行文件分发p2p下载?
如何在浏览器中录制摄像头和麦克风数据为mp4视频保存下载本地?
go如何编写一个类似docker的linux的虚拟容器?
python如何写一个bittorrent的种子下载客户端?
ai能通过看一个网页的交互过程视频自主模仿复制网页编写代码吗?
ai先写功能代码通过chrome mcp来进行测试功能最后ai美化页面这个流程能行吗?
vue在手机端上下拖拽元素的时候如何禁止父元素及body的滚动导致无法拖拽完成?
使用tailwindcss如何去掉响应式自适应?
有没有直接在浏览器中运行的离线linux系统?
nginx如何保留post或get数据进行url重定向?