温馨提示×

温馨提示×

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

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

索引扫描和全表扫描区别

发布时间:2026-09-09 08:20:32 来源:亿速云 阅读:108 作者:小樊 栏目:数据库

在数据库中,索引扫描(Index Scan)和全表扫描(Full Table Scan,简称 FTS)是两种常见的数据访问方式,核心区别在于是否利用索引来定位数据以及读取的数据量不同。


一、全表扫描(Full Table Scan)

定义:
数据库从头到尾扫描整张表的所有数据块,逐行判断是否满足查询条件。

特点:

  • 不依赖索引
  • 读取整张表的数据(或至少所有数据页)
  • 实现简单,但在大表上代价高

适用场景:

  • 表数据量很小
  • 查询需要绝大多数数据(如 SELECT * FROM table)
  • 没有合适索引
  • 索引选择性差(如性别字段)

优点:

  • 实现简单
  • 对大范围数据读取可能更高效(减少随机 I/O)

缺点:

  • 数据量大时性能差
  • 容易产生大量 I/O

二、索引扫描(Index Scan)

定义:
数据库先通过索引结构(如 B+ 树)快速定位符合条件的记录位置,再根据需要回表取数据。

常见类型:

  1. 索引全扫描(Index Full Scan):扫描整个索引
  2. 索引范围扫描(Index Range Scan):扫描索引的一部分
  3. 索引唯一扫描(Index Unique Scan):命中唯一索引
  4. 索引覆盖扫描(Index Only Scan):只需索引,不需回表

特点:

  • 利用索引的有序性和树结构
  • 通常只访问少量数据块
  • 可显著减少 I/O

适用场景:

  • 高选择性查询(如 WHERE id = 100)
  • 查询条件命中索引
  • 只需索引列(覆盖索引)

优点:

  • 查询速度快
  • I/O 量少
  • 尤其适合大表点查

缺点:

  • 需要维护索引(写操作变慢)
  • 回表会增加开销
  • 索引失效时可能退化为全表扫描

三、核心区别对比

对比项 全表扫描 索引扫描
是否用索引 否 是
扫描范围 整张表 部分数据
I/O 成本 高 低(通常)
适合数据量 小表 / 大范围 大表 / 小范围
回表 不需要 可能需要
性能 随数据量线性下降 通常更稳定

四、简单示例

-- 可能全表扫描
SELECT * FROM user WHERE age > 10;

-- 若 age 有索引,可能索引扫描
SELECT * FROM user WHERE id = 1;

五、一句话总结

全表扫描是“翻完整本书找内容”,索引扫描是“先查目录再翻到对应页”。

如果你愿意,我也可以结合 MySQL / Oracle / PostgreSQL 具体讲执行计划怎么看。

向AI问一下细节

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

AI
助
手