mysql性能优化系列(六) --- mysql中常见的SQL优化策略

常见的SQL优化策略

1、避免全表扫描

对查询进行优化,应尽量避免全表扫描。首先考虑在where以及order by 上添加索引。

2、避免判断null值

避免在where子句中判断null值,否则会导致引擎放弃使用索引而进行全表扫描。

3、避免不等值判断

应尽量避免在where子句中使用 !=或者<>操作符,否则会导致引擎放弃使用索引而进行全表扫描。

4、避免使用or

应当尽量避免在where子句中使用or来连接条件,否则会导致引擎放弃使用索引而进行全表扫描。

例如:select id,name from user where age=10 or age=20 这样就会进行全表扫描。
改成:select id,name from user where age=10 union all select id,name from user where age=20

5、慎用 in 和 not in

也会导致全表扫描。可以改成表连接查询。

6、模糊查询要注意用法

因为mysql的索引可以匹配列的前缀。所以模糊查询的 like 最好由 like '%abc%' => like 'abc%'

7、避免在查询条件中做字段计算

还是会导致全表扫描。

例如:
select id from user where age/2=10
应改为:select id from user where age = 10*2

8、避免查询条件中对字段进行函数操作

也会导致全表扫描。

9、不要在where 子句 = 号左边做函数、算术或者其他运算

会导致引擎无法正确使用索引。

10、组合索引使用要用到第一个索引查询

因为mysql的索引有着匹配最左前缀的查询(B-Tree索引)的规则。就好像打比方要找一个人。知道姓,一下子就能筛选很多,知道姓也知道名,找的就更快。但如果只知道名字,mysql索引就和我们一样不知道怎么找了。

所以,联合索引的查询必须用到第一个字段。至少。

11、用exists 代替 in

例如:select num from a where num in (select num from b) 可以改成

select num from a where exists(select 1 from b where num = a.num)

12、不要使用 select *

发布了41 篇原创文章 · 获赞 9 · 访问量 2513

猜你喜欢

转载自blog.csdn.net/weiwei_six/article/details/103913484