导致全表扫描的情况

来源:互联网 发布:交大医学院网络教育 编辑:程序博客网 时间:2024/03/28 22:36

1.查询时没有设定查询条件。例如:select * from tablename;

2.查询条件中不要使用in操作符。如果是联系范围推荐可以是用between代替。

3.not in使用,not in不会走索引。

处理方式:用exists 或者外联结 + 判断为空代替

4.is null 或 is not null 会导致索引失效,引起全表扫描

5.查询条件中使用了不等于操作符(<>,!=)导致索引失效

处理方式:将不等于操作符换成or

6.or使用不当导致索引失效。例如:where column1 < '1' or column2 >'3' 只有column1和column2都使用了索引,索引才会有效,否则导致索引失败。

7.like使用不当。

 解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like‘…%’,是会使用索引的;左模糊like‘%...’无法直接使用索引,但可以利用reverse + function index的形式,变化成like‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。

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

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

0 0
原创粉丝点击