索引扫描比全表扫描快,核心原因在于缩小了需要访问的数据范围,并减少了磁盘 I/O 和比较次数。下面从原理到细节系统说明。
全表扫描的流程是:
特点:
索引本质上是一种有序的数据结构(常见的是 B+Tree),它存储:
索引扫描流程(以等值查询为例):
| 扫描方式 | 访问数据量 |
|---|---|
| 全表扫描 | 整张表 |
| 索引扫描 | 满足条件的少量数据 |
例如:
SELECT * FROM orders WHERE order_id = 12345;
磁盘 I/O 是数据库最慢的操作:
如果是覆盖索引(Covering Index):
SELECT order_id FROM orders WHERE order_id = 12345;
order_id索引不是银弹,以下情况可能反而更慢:
SELECT * FROM orders WHERE status = 'ACTIVE';
-- ACTIVE 占 90%
如:
索引过滤效果差,扫描成本接近全表
索引扫描快,是因为它通过有序结构快速定位少量数据,避免了扫描整张表,从而大幅减少 I/O 和比较次数。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。