索引扫描(Index Scan)是数据库利用索引来定位或读取数据的一种访问方式。并不是所有查询都适合索引扫描,通常在以下场景更适合或效率更高:
当查询的字段都包含在索引中时,数据库可以只扫描索引而无需回表。
-- 假设有索引 (user_id, status)
SELECT user_id, status FROM orders WHERE user_id = 1001;
✅ 适合:Index Only Scan / 覆盖索引扫描
当查询条件能大幅减少数据量时,索引扫描远优于全表扫描。
SELECT * FROM user WHERE id = 12345;
SELECT * FROM log WHERE create_time BETWEEN '2024-01-01' AND '2024-01-02';
✅ 适合:
如果 ORDER BY / GROUP BY 的字段与索引一致,可避免额外排序。
-- 索引 (score DESC)
SELECT * FROM student ORDER BY score DESC LIMIT 10;
✅ 适合:索引有序扫描,减少 Sort 操作
使用联合索引的最左前缀条件时,索引依然有效。
-- 索引 (a, b, c)
SELECT * FROM t WHERE a = 1 AND b = 2;
✅ 适合:最左前缀索引扫描
大表中只返回少量行时,索引扫描优势明显。
-- 千万级用户表
SELECT * FROM user WHERE phone = '13800000000';
SELECT * FROM user WHERE YEAR(create_time) = 2024; -- 索引失效
✅ 适合索引扫描:
命中少、字段少、顺序对、回表少
❌ 不适合:
命中多、过滤差、需排序、函数包裹
如果你有具体 SQL 或数据库类型(MySQL / PostgreSQL / Oracle),我可以帮你判断是否该走索引扫描。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。