温馨提示×

温馨提示×

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

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

索引扫描和索引查找区别

发布时间:2026-09-29 21:56:53 来源:亿速云 阅读:110 作者:小樊 栏目:数据库

在数据库(以 SQL Server 等关系型数据库为例)中,索引扫描(Index Scan)和索引查找(Index Seek)是执行计划里两种常见的索引访问方式,核心区别在于是否利用索引的有序性和定位能力来快速定位数据。


一、索引扫描(Index Scan)

含义:
按照索引的存储顺序,从头到尾(或按范围)逐行读取索引页,相当于“全索引遍历”。

特点:

  • 不使用索引的“定位”能力
  • 会读取索引中的大量或全部行
  • 通常发生在:
    • 查询条件无法有效使用索引(如函数包裹列、隐式转换)
    • 需要返回大部分数据
    • 索引选择性差

示例:

SELECT * FROM User WHERE YEAR(CreateTime) = 2023;

(YEAR() 导致索引失效 → 索引扫描)

代价:
I/O 和 CPU 消耗较高,数据量大时性能差。


二、索引查找(Index Seek)

含义:
利用索引的 B+Tree 结构,从根节点快速定位到目标数据页,只读取所需行。

特点:

  • 高效利用索引
  • 只访问少量页
  • 通常发生在:
    • 使用了索引列作为查询条件
    • 条件具有选择性(如 =、>、<、BETWEEN)

示例:

SELECT * FROM User WHERE UserId = 1001;

(UserId 是聚集索引 → 索引查找)

代价:
通常很低,是理想的数据访问方式。


三、核心区别对比

对比项 索引扫描 索引查找
是否利用索引定位 ❌ 否 ✅ 是
读取范围 大量 / 全部 少量 / 精确
性能 较慢 较快
常见原因 条件无法用索引 条件命中索引
执行计划关键字 Index Scan Index Seek

四、简单类比

  • 索引扫描:翻完整本书找内容
  • 索引查找:用书目录直接跳到指定页

五、补充说明

  • 有时“表扫描(Table Scan)”比“索引扫描”更差(无索引)
  • 并非所有扫描都不好(小表、全表统计时扫描更高效)
  • 可通过:
    • 建合适索引
    • 避免对索引列使用函数
    • 写 SARGable 查询
      来将扫描转为查找

如果你说的是 特定数据库(MySQL / Oracle / PostgreSQL) 或 执行计划优化场景,我可以进一步细化。

向AI问一下细节

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

AI
助
手