在数据库中,“索引扫描(Index Scan)”是查询优化器选择使用索引来定位或读取数据的一种方式。简单地说,当查询可以利用索引来避免全表扫描、提高检索效率时,就会发生索引扫描。
下面从“什么时候会发生”和“不同类型的索引扫描”两个角度来说明。
通常满足以下条件时,优化器更可能选择索引扫描:
例如:
SELECT * FROM user WHERE id = 100;
如果 id 上有索引,通常会发生索引扫描(甚至索引查找)。
SELECT name FROM user WHERE age > 20;
如果 (age, name) 是联合索引,数据库可以直接从索引中返回结果,发生索引覆盖扫描。
SELECT * FROM order ORDER BY create_time;
如果 create_time 有索引,可能直接按索引顺序扫描,避免额外排序。
优化器估算:
就会选择索引扫描。
SELECT * FROM a JOIN b ON a.id = b.a_id;
若 b.a_id 有索引,常发生索引扫描(如 Index Nested Loop Join)。
>, <, BETWEEN, IN, LIKE 'abc%'WHERE DATE(create_time) = ...LIKE '%abc'当查询条件、排序、覆盖列能被索引有效支持,并且使用索引比全表扫描更省成本时,就会发生索引扫描。
如果你指的是某种具体数据库(MySQL / Oracle / PostgreSQL)或具体 SQL 场景,我可以给你更精确的解释。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。