索引扫描(Index Scan)是数据库利用索引结构(如 B‑Tree、Hash、GIN、GiST 等)来定位并访问数据的一种常见方式。它并不适合所有查询,但在以下场景中通常表现更好。
适合:
SELECT * FROM orders WHERE order_id = 12345;
原因:
✅ 最适合索引扫描的场景之一
适合:
SELECT * FROM orders WHERE create_time BETWEEN '2024-01-01' AND '2024-01-31';
原因:
✅ 常见于时间范围、金额区间、ID 区间查询
适合:
SELECT * FROM orders ORDER BY create_time DESC LIMIT 10;
原因:
sort 操作(filesort)✅ 对分页查询尤其友好
适合:
SELECT order_id, status FROM orders WHERE user_id = 100;
前提:
优势:
✅ 性能提升最明显的一类索引扫描
适合:
SELECT *
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.id = 10;
原因:
users.id 使用索引orders.user_id 使用索引✅ 索引扫描在 JOIN 中非常关键
适合:
SELECT user_id, COUNT(*)
FROM orders
GROUP BY user_id;
前提:
(user_id) 或 (user_id, ...) 索引原因:
适合:
SELECT 1 FROM users WHERE email = 'a@b.com';
原因:
EXISTS / UNIQUE 校验SELECT * FROM orders WHERE status = 'ACTIVE';
| 场景 | 更适合 |
|---|---|
| 返回少量行 | 索引扫描 |
| 返回大量行 | 全表扫描 |
| 排序可利用索引 | 索引扫描 |
| 覆盖索引 | 索引扫描 |
| 表很小 | 全表扫描 |
索引扫描适合:返回数据少、选择性强、可利用索引顺序、能避免回表或排序的查询。
如果你愿意,可以贴出具体 SQL 或数据库类型(MySQL / PostgreSQL / Oracle),我可以帮你判断是否适合索引扫描,以及是否需要调整索引设计。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。