我们日常开发中常常会遇到数据库查询比较慢,大量的慢查询日志堆积使开发人员痛不欲生,上有DBA劈头盖脸的吐槽你SQL写的垃圾导致数据库负载居高不下,下有产品经理鄙视你代码垃圾系统响应太慢,只有你夹在中间欲哭无泪,而面试中也常常会问到你对于SQL性能优化的知识,下面我们就来说一下开发中必须要掌握的一些SQL优化技能。
如果你对数据库的数据库引擎、数据库索引原理不是很了解那你可以查看我之前的两篇文章:
2024年08月03日
我们日常开发中常常会遇到数据库查询比较慢,大量的慢查询日志堆积使开发人员痛不欲生,上有DBA劈头盖脸的吐槽你SQL写的垃圾导致数据库负载居高不下,下有产品经理鄙视你代码垃圾系统响应太慢,只有你夹在中间欲哭无泪,而面试中也常常会问到你对于SQL性能优化的知识,下面我们就来说一下开发中必须要掌握的一些SQL优化技能。
如果你对数据库的数据库引擎、数据库索引原理不是很了解那你可以查看我之前的两篇文章:
首先把基础原理搞懂才能谈优化,而生产中我们怎么确定哪些是慢查询SQL的呢?那就要用到我们的慢查询日志了,配置方法如下:
修改配置文件my.cnf,在[mysqld]下的下方加入
[mysqld]
slow_query_log = ON
log_queries_not_using_indexes = ON;
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1 #时间自己根据业务情况定义
这样我们就能获取到我们系统中的慢查询SQL了,获取到这些慢查询SQL之后呢,我们可以使用Explain 这个命令对我们的语句进行分析,如果不懂这个命令的使用,可以查看我的另一篇文章:MySQL——SQL性能分析优化利器之Explain
安利了半天,下面我们就进入正题,下面是我们平时开发中在写SQL时一定要牢牢掌握的一些建议,只只有将这些建议牢记于心才能真正写出高性能的SQL。
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难!