1.尽量避免在 where 子句中使用!=或<>操作符
2.优先考虑在 where 及 order by 涉及的列上建立索引
3.尽量避免在 where 子句中对字段进行 null 值判断
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4.应尽量避免在 where 子句中使用 or ,如:
select id from t where num=10 or num=20
效率高的方法使用union all/union:
select id from t where num=10
union all
select id from t where num=20
5.不能前置百分号
select id from t where name like "%abc%"
若要提高效率,可以考虑全文检索。
6.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3);
对于连续的数值,用 between 而不要用 in :
select id from t where num between 1 and 3;
7.应尽量避免在 where 子句中对字段进行表达式操作。如:
select id from tab where num/2=10
应改为:
select id from tab where num=10*2
8.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)--提前预知a的数据量大于b时,此效率高
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)--提前预知b的数据`量大于a时,此效率高
9.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,
否则该索引将不会被使 用,并且应尽可能的让字段顺序与索引顺序相一致;
例如 a(前置索引),b,c三个索引,ab/ac/abc索引起作用,bc时索引失效。
10.索引并不是越多越好:对于需要经常查询的列可以建立索引,对于经常需要修改的列则避免建立索引;对于数据量小的表不可以建立索引。
11.避免使用游标,游标效率本身差,若游标操作的数据超过一万行,则应该考虑改写。
————————————————
版权声明:本文为CSDN博主「上士闻道~勤而行之」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huangli1466384630/article/details/79828504