MySQL调优思考和案例解读

导读:本篇文章讲解 MySQL调优思考和案例解读,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

最近在研读MySQL官方关于调优的一些文档,在看完explain相关的文档之后,收获颇丰,文末附了链接,感兴趣的同学可以打开通读一番,后续我也会打算整理一下发布到CSDN上,可以小小期待一下~ ~ ~

如何学习调优

不知道大家都是怎么学习MySQL调优的,如果是看了官方文档,然后尝试自己调,或者是某技术大牛进行底层深度讲解和传授,那应该恭喜你,在MySQL调优这块应该还是学的不错!
如果是通过网络一搜,然后随意翻找几篇看看应付一下,那我建议你应该好好看看官方文档,重新学一学。

官方网站截图

由于官方版本是全英文读物,读起来比较晦涩(又臭又长,英文和中文的语法又有一些出入),加之网页的翻译工具又不给力,确实会击退很多初学者。

笔者之前也是存在这样的心态,所以后来就直接网上搜了搜,也“掌握”了不少调优技能。但是事实上,真的掌握了吗,最近反复在思考,调优的方法论是什么,但是,看了那么多的调优技巧,似乎没有一个确定的方法论,只是在哪些基础上进行了总结。

调优案例解读

讲几个自己之前收藏的调优技能,以下是之前整理的一些调优技能的说法:

1、尽量避免在where 子句中等号左右数据类型不一致
2、尽量避免在where 子句中对字段进行null 值判断
3、尽量避免在where 子句中使用!= 或<> 操作符
4、尽量避免在where 子句中使用or 连接条件
5、尽量避免在where 子句中使用in 或not in

这些说法,其实在实际跑数的过程中会经常看到或者用到,但具体怎么调优并不得知。用了又会怎么样,效果会差多少?如果不用,有什么更好的替代方法?如何看到一个更直观科学的方法?这一些都未做说明。

鉴于权限的影响,很多时候数据分析师、数据运营等只有select权限,有一些调优其实我们也是无能为力。

比如说第1点,关于数据类型的:

  • 如果是查找数据,像一个原本是数值类型的字段no,用字符串值进行查找where no='1',这种的话比较容易,直接把'1'改为1即可。
  • 如果是字段的关联,像where t1.col_1=t2.col_2(注:col_1字段的数据类型是intcol_2字段的字符类型是char),这时候MySQL会做隐性转换,保持字符类型一致之后再匹配,而隐性转换之后就不能走索引了,即使显性转换也是。这种调优需要将col_1字段的数据类型改为char,或是将col_2字段的数据类型改为int,但是仅有select权限是没法处理的。

比如说第2、3、5点,如果是针对索引列进行操作,是属于范围扫描,一般性能方面相对于全索引和全表扫描还是会好很多。
而第4点,使用or 一般就是进行全表扫描了,就只能尽量少用,想办法进行替换。当然,具体情况还是具体分析,需要对比优化前后的性能,取最优解。
第2~5都是理论上的正确,具体的情况还是要根据实际的情况进行性能对比,要实践的正确!

一点牢骚

每隔一段时间,对自己所掌握的知识点进行总结的时候,总会有新的收获和认知产生。之前学了那么多的调优技能,但是实际上却只是知其然而不知其所以然。
当然,知识是会不断更新迭代的,现在知其所以然,并不是一直适用,未来可能还是重归于零。

社会在发展,知识在更迭,人自然也要跟着前进。
之前看过一句话,颇受启发,也一并赠与读者:没有思考与总结,就没有进步
古人云:吾日三省吾身。也是这么个道理,小时被送到朗朗上口的普世真理,都隐含有很大的智慧,不过时机未到,没能领悟罢了。

附件

EXPLAIN输出格式:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/66965.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!