导致全表扫描的情况

本文介绍了在进行数据库查询时常见的导致索引失效的情况及其优化方法,包括查询条件设置、操作符使用、模糊查询等方面的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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和内存资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值