索引查找和索引扫描

全表扫描:读取表中所有的行
索引扫描:类似全表扫描
索引查找:定位到索引指向的局部位置

产生索引扫描的原因:
1.隐式转换容易从索引查找变成索引扫描


2.统计信息缺失或者不正确容易导致索引扫描


3.where子句中的谓词不是联合索引的第一列
对于联合索引最左边一列存有统计信息,其他列sqlserver不存统计信息


4.where 子句里串联会导致索引失效
 where A+B = ... (索引为A,B联合索引)
解决方法:
1).A+B生成一个计算列
2).where A = ...and where b=...


5.=,>,<,>=,<=,between,已经部分like(like'%XXX') 可以使用索引查找
优化like查找:
1)在oracle中可以使用instr
select count(*) from table t where instr(t.code,'Cod2%') > 0
2)在mysql中可以用locate和position函数,
如field like '%AAA%'可以改为locate('AAA',field) > 0
或POSITION('AAA' IN field)>0。  
3)在sql server中,可以给字段建立全文索引,用contains来检索数据


6.where条件中使用标量函数回事索引查找转为索引扫描


7.隐式转换:表中的数据与where条件或者on条件的变量格式不一致,或者两个相关联的表的格式不一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值