什么是慢查询?如何优化?
- 1. 什么是慢查询?
- 2. 优化SQL来减少慢查询
-
- 2.1. 索引优化
- 2.2 拆解分批
1. 什么是慢查询?
慢查询,顾名思义,就是比较慢的查询,那什么是算是慢查询呢?不同的公司对于慢查询的定义不尽相同。
一般情况下,我们把查询时间超过1s
的查询称为慢查询。
2. 优化SQL来减少慢查询
2.1. 索引优化
慢查询非常多的情况是由于SQL
没有走适当的索引导致的。但是,即使加上索引,如果使用不正确,SQL
语句在执行时依然不会走索引。哪些情况下SQL
语句不走索引呢?
WHERE
条件中的1=1
,查询条件永远为真,可能导致WHERE
条件失效,进行全表查询;- 使用函数或者隐式转化会导致不走索引;
LIKE
匹配通配符号在前面的时候,不走索引;- 使用了否定条件;
OR
其中一个有索引,另一个没有的情况;- 多列索引需要满足最左匹配原则;
- 两张表字符集不一样或者编码不一样,联表查询时;
IN
的内容过多,会不走索引;
2.2 拆解分批
如果数据量比较大,则可以尝试拆解分批的方式来减少慢查询:
- 多层嵌套查询改为多次查询;
IN
子查询影响查询性能,用JOIN
方式代替;- 一次查询数量过于庞大,拆成多次查询、拼装。
- 用了反向查询(比如
NOT IN
)或者IN
语句参数集太多,可能会导致全表扫描,这种情况尽量拆分语句,或者内存中过滤解决; - 将⼤字段、访问频率低的字段拆分到单独的表中存储,分离冷热数据;
- 分库分表;
- 归档;
相关文章
暂无评论...