温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

索引扫描原理是什么

发布时间:2026-09-30 00:24:58 来源:亿速云 阅读:93 作者:小樊 栏目:数据库

“索引扫描(Index Scan)”是数据库在执行查询时,利用索引结构快速定位数据的一种访问方式。下面从原理到常见类型系统说明。


一、为什么需要索引扫描

表数据通常按插入顺序存储(堆表),全表扫描(Full Table Scan)要读取所有行,成本高。
索引是一种有序的数据结构(如 B+Tree、Hash、Bitmap),记录“索引列值 → 行位置”的映射,可大幅减少访问的数据量。


二、索引扫描的基本流程(以 B+Tree 为例)

  1. 解析查询条件
    • 例如:WHERE id = 100
  2. 从根节点出发
    • 数据库从 B+Tree 的根块开始,按值比较向下层查找
  3. 定位叶子节点
    • 叶子节点保存:
      • 索引列值
      • 行指针(如 RowID / 聚集索引键)
  4. 回表或直接返回
    • 若索引包含所需列 → 不回表(覆盖索引)
    • 否则根据指针去表中取完整行(回表)

三、常见索引扫描类型

1. 索引唯一扫描(Index Unique Scan)

  • 条件:唯一索引 + 等值查询
  • 特点:最多只命中一行,效率最高

2. 索引范围扫描(Index Range Scan)

  • 条件:>, <, BETWEEN, LIKE 'abc%'
  • 特点:沿叶子链表顺序扫描一段范围

3. 索引全扫描(Index Full Scan)

  • 扫描整个索引(不扫描表)
  • 常用于排序或统计

4. 索引快速全扫描(Index Fast Full Scan)

  • 多线程 / 多块读扫描索引
  • 用于统计,不保证顺序

5. 覆盖索引扫描(Covering Index)

  • 查询列全部在索引中
  • 无需回表,性能极佳

四、回表(Table Lookup)

非覆盖索引时:

索引扫描 → 得到 RowID → 访问表数据块

回表会增加 I/O,是性能关键点。


五、Hash / Bitmap 索引扫描(简述)

  • Hash 索引:只支持等值,O(1) 定位
  • Bitmap 索引:适合低基数列,按位图做 AND/OR 运算

六、索引扫描 ≠ 一定快

以下情况可能不如全表扫描:

  • 返回行数过多(如 > 30% 表)
  • 索引选择性差
  • 回表成本过高

如果你指的是 某个具体数据库(MySQL / Oracle / PostgreSQL) 或 某种索引(B+Tree / 倒排 / 向量索引),我可以给更针对性的说明。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手