跳跃式索引扫描的原理挺有意思的,尤其在用组合索引的时候。如果你的WHERE
语句只用了第二列,那全索引扫描就有点浪费了,跳跃式索引扫描在这时候出场,效率会提升。
它比起全索引扫描,读取的数据块更少,速度也更快。比如你有个索引是(user_id, status)
,但查询里只写了WHERE status = 'active'
,那 Oracle 就用跳跃式来扫,跳过前面的user_id
部分,效率还挺高。
不过要注意哦,这种扫描方式不是每次都会触发,得看你表的数据分布,还有统计信息是否新鲜。你可以通过EXPLAIN PLAN
看下执行计划,或者用DBMS_XPLAN.DISPLAY
配合一下,能看到到底用了哪种扫描。
顺带一提,如果你对索引优化比较感兴趣,下面这些文章也挺值得一读的:
- Oracle 索引唯一扫描原理
- 组合索引优化
- oracle 索引基本工作原理详解
- 优化 ORACLE 等待事件中全索引扫描对象的获取
- 深度解析 MySQL 索引的原理
- 索引扫描在 SQL 执行中的应用和优化
- ORACLEsql 优化有效利用组合索引的第一列
如果你平时经常写 SQL,又遇到那种组合索引查询效率忽高忽低的情况,建议看看这些文章,思路会清楚多。