会引起 sql语句全表扫描的几种情况(可能不全,欢迎补充)

1.模糊查询(like)

like ‘ a%’ 这种查询是可以使用索引的

like'%a'   这种查询索引是会失效的

所以尽量避免不要使用2个百分号一起查询。建议的办法是reverse+function index 的形式。

2.查询中包含 is null的sql语句

3.查询中包含不等于这些符号的,例如(   < >    !=  )建议改成or来实现同样的判断或者查询功能

4.使用组合索引,如果查询条件中没有前导列

5.or使用不当也会造成全表扫描,不要过多的使用or.

原因:where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。例如:where A=1 or B=2,A上有索引,B上没索引,则比较B=2时会重新开始全表扫描。

6.组合索引

排序时应按照组合索引中各列的顺序进行排序,即使索引中只有一个列是要排序的,否则排序性能会比较差。例如:create index skip1 on emp5(job,empno,date);  select job,empno from emp5 where job=’manager’and empno=’10’ order by job,empno,date desc; 实际上只是查询出符合job=’manager’and empno=’10"条件的记录并按date降序排列,但是写成order by date desc性能较差。

扫描二维码关注公众号,回复: 1662248 查看本文章

7.update 修改 少量字段的时候尽量不要使用这个

8.对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。

9.select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

10.sql的where条件要绑定变量,比如where column=1,不要写成where column=‘aaa’,这样会导致每次执行时都会重新分析,浪费CPU和内存资源。

我的建议是 where column=$param

对于学优化的可以从这里抓起哦,好好学下,欢迎大家补充哦

猜你喜欢

转载自www.cnblogs.com/HoverM/p/9204767.html