
整理 | bubble
出品 | 平头哥(ID:t-head)
在实际开发的项目中,随着项目的持续运行,数据表中的数据量会逐渐增加。那么如何在大数据量的情况下保持高效的查询,成为了技术人员和数据专业人士关注的焦点。
开启:
可以在mysql.ini或者mysql.cnf配置文件中,加入相应的配置语句
slow_query_log=on;long_query_time=1
定位:
第一步开启慢日志后,当SQL语句触发了设置的慢查询时间,该SQL相应的信息会被写入慢查询日志,根据日志文件,找出慢查询的SQL语句。
分析:
使用EXPLAIN分析执行计划:对于发现的慢查询,使用EXPLAIN关键字来获取查询的执行计划,以便了解MySQL是如何处理该查询的。

慢查询分析语句
1. 索引的重要性
索引对于良好的性能非常关键,当数据表数据量越大时,索引对性能的影响愈发重要,在数据量较小时,不恰当的索引对性能影响可能还不明显。但随着数据量逐渐增大,性能则会急剧下降。对于我们开发人员而言,索引应该是对查询性能优化最有效的手段了。所以创建一个真正的“最优”索引,是我们开发人员必掌握的一项技能。
普通索引:是最常见的索引类型,用于加速常用查询的执行。
主键索引:唯一标识一行数据,可用于数据的唯一性和完整性。
组合索引:由多个列组成的索引,可用于加速多列查询的执行。
(1) 在普通索引中,查询的列不是独立的列时:
SELECT * FROM `fa_cms_archives` where channel_id + 1 = 6 limit 10000;
SELECT * FROM `fa_cms_archives` where channel_ids=27 limit 10000;
(3) is null、is not null、!= 是日常使用较多的操作关键字,尽管 MySQL 官方文档已经明确说明is null并不会影响索引的使用。但我们遇到这几个关键字还是会让索引失效,比如:
select id,deletetime from fa_cms_archives where deletetime is null;
SELECT * FROM `fa_cms_archives` where publishtime > 1683365282 limit 10000;
当执行一条简单的sql语句
select * from `fa_cms_archives` where id=818;
MySQL内部的具体做了那些事情?

生命周期
2. 对SELECT* 保持怀疑

覆盖索引是MySQL优化sql性能的一种非常重要而且常用的手段,通过覆盖索引,我们可以直接查询到需要的结果,而不用回表,从而大大减少树的搜索次数,非常明显的提升查询性能。比如语句:
SELECT channel_id FROM `fa_cms_archives` where channel_id in (25,26,27,28)
4. SQL语句切分
5. 分页优化
select * from fa_cms_archives limit 100,10;
select * from fa_cms_archives limit 10000000,100
select * from fa_cms_archives where id between 10000000 and 10000100;
select * from fa_cms_archives where id > (select id from fa_cms_archives limit 10000000,1) limit 100

创建一个高性能的应用程序,MySQL优化是开发人员绕不开的点。本文从慢查询定位,索引优化、SQL语句优化、一些特定场景下写SQL语句需要注意的点等方面进行了探讨。除了这些方面的优化外,MYSQL还有一些高级的特性可以帮助优化我们的应用,比如分区、分表等。希望大家能在平时工作中能够查阅相关的资料,并进行SQL调优,总结相关经验,不断优化,最终写出更加高质量的SQL语句。

SEO
搜索引擎排名因素 | SEO优化技巧 | 外链技巧 丨关键词蚕食解决方法全收录 丨如何优化技术SEO 丨教你识别垃圾外链中介
营销工具
多语言建站工具 | ChatGPT | 设计工具 | Ahrefs在外链中的重要性 | Ahrefs外链实战技巧 | Ahrefs SEO策略分析技巧
广告投放
Wordpress建站
AI人工智能


广州霆万科技有限公司,已积累10年+的品牌独立站运营经验,在软件出海领域有深厚沉淀。霆万出海学院结合实战分享市场营销,海外推广等知识,并与霆万平头哥的技术创新、六度品牌心智模型,并驾齐驱帮助中国品牌实现全球增长。


