会引起 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性能较差。

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

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

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

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

我的建议是 where column=$param

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

转载于:https://www.cnblogs.com/HoverM/p/9204767.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值