概述
今天分享下之前整理的关于mysql方面内容,主要包括下面三方面内容:
1. 对表进行优化 ( 优化表主要作用是消除删除或者更新造成的空间浪费)
2. 对表进行分析(分析关键字的分布, 分析并存储MyISAM和BDB表中键的分布)
3. 对表进行检查(检查表的错误,并且为MyISAM更新键的统计内容)
定期分析表
语法:ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]
本语句用于分析和存储表的关键字分布。在分析期间,使用一个读取锁定对表进行锁定。这对于MyISAM, BDB和InnoDB表有作用。对于MyISAM表,本语句与使用myisamchk -a相当。
MySQL使用已存储的关键字分布来决定,当您对除常数以外的对象执行联合时,表按什么顺序进行联合。
![796a24408d731b23eccf6fc1e14aca13.png](https://i-blog.csdnimg.cn/blog_migrate/2ba59cb0004d1e73244f92e5f325a1d8.jpeg)
定期检查表
语法:CHECK TABLE tbl_name [, tbl_name] [option]
option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
检查一个或多个表是否有错误。CHECK TABLE对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计数据被更新。
![664c14987e6dae24894643e62bffa1c6.png](https://i-blog.csdnimg.cn/blog_migrate/7aaea359e1fed7ca89d122594a29cd7b.jpeg)
CHECK TABLE也可以检查视图是否有错误,比如在视图定义中被引用的表已不存在。
我们为上面的表a创建一个视图
![c337948e550961e375557bc7271f6eb5.png](https://i-blog.csdnimg.cn/blog_migrate/90afc5e9b01fb87104698f9447a9fea7.jpeg)
然后CHECK一下该视图,发现没有问题
![9f0c159882e71a4fdcb2a51ffd19ed21.png](https://i-blog.csdnimg.cn/blog_migrate/70d3b59d7bb96a3458721ab57710af01.jpeg)
删掉视图依赖的表
![1f09d58481af7d0aec9524b636b4dea7.png](https://i-blog.csdnimg.cn/blog_migrate/91406413a9ff53a1469a58b88667f228.jpeg)
再CHECK一下刚才的视图,发现报错了
![c8d2870e372c74569af4ec91669ebaf7.png](https://i-blog.csdnimg.cn/blog_migrate/e49d1b09777e371a93b38bfc72427eac.jpeg)
定期优化表
语法:OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]
如果已经删除了表的一大部分,或者如果已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。
可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。
在多数的设置中根本不需要运行OPTIMIZE TABLE。即使对可变长度的行进行了大量的更新,也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。
OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。
对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
如果表已经删除或分解了行,则修复表。
如果未对索引页进行分类,则进行分类。
如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。
![9082c388eb8db681b36d1e613d52473e.png](https://i-blog.csdnimg.cn/blog_migrate/9daa13b0edb081a487ed38fbd8f7f62e.jpeg)
注意:无论是ANALYZE,CHECK还是OPTIMIZE在执行期间将对表进行锁定,因此这些操作要在数据库不繁忙的时候执行。
篇幅有限,关于ANALYZE,CHECK还是OPTIMIZE表方面的内容就介绍到这,大家有空的话也可以去做下实验。
后面会分享更多关于DBA方面的内容,感兴趣的朋友可以关注下!!
![f25c92fa87f89a00ca2618ecbadc9f33.gif](https://i-blog.csdnimg.cn/blog_migrate/96ea3f9d707f337f5d7b05d57ff7f9c2.gif)