Oralce 组合索引

组合索引的 1:索引范围扫描 INDEX (RANGE SCAN) 2:索引跳跃式扫描INDEX(SKIP SCAN)  

如下建立组合索引

当前oralce 版本 

一:INDEX (RANGE SCAN)

组合索引情况下,where 条件包含索引的第一列字段查询时,正常会走INDEX (RANGE SCAN)查询,测试数量为24067206条数据时,explain查询语句依然进行了索引范围扫描(具体量达到多少极限值时,会走全表扫描,这个后续进行监测)

二:INDEX(SKIP SCAN)  

组合索引情况下,where 条件不包含索引的第一列字段查询时,并且当数据比较少时会进行索引跳跃式扫描,依旧会走索引

度娘:为什么在where条件中没有对目标索引的前导列指定查询条件,但Oracle依然可以用上该索引呢?这是因为Oracle帮你对该索引的前导列的所有distinct值做了遍历。

Oracle中的索引跳跃式扫描仅仅适用于那些目标索引前导列的distinct值数量较少、后续非前导列的可选择性又非常好的情形

2.1:表中有618条测试数据时,where 不包含前导列字段,explain 查询语句可以看到执行语句进行了索引跳跃式扫描

2.2 当测试数据增加在999条时,再执行explain,发现开始进行了全表扫描

总结:没有前导列查询,不一定不走索引。但是索引跳跃式扫描的执行效率一定会随着目标索引前导列的distinct值数量的递增而递减,所以当表中数量大时,效率低下时,就进行了全表扫描

三:总结

1:数据库中建立了组合索引时,前导列的建立是要慎重考虑的,优先考虑必传值

2:组合索引查询时,最好一定要加上前导列的查询字段,否则量大时,一定会全表扫描,查询速度慢,会导致业务调用超时,影响比较大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值