在日常开发中,我们经常听到"加个索引就能变快",但索引到底是如何工作的呢?
一、例子:图书馆找书
你要在一本500页的技术书中找到所有提到"MySQL"的页面:
没有索引的情况(全表扫描):
- 从第一页开始,逐页阅读
- 每页都要仔细检查是否包含"MySQL"
- 直到翻完整本书才能找到所有相关内容
- 耗时:30分钟
- CPU消耗:高(需要处理所有内容)
有索引的情况(索引查找):
- 直接翻到书最后的索引页(已按字母排序)
- 找到"MySQL"条目,看到页码:35, 89, 156, 278
- 直接翻到这些特定页面获取内容
- 耗时:1分钟
- CPU消耗:低(只处理相关页面)
数据库查询也是同样的原理!索引就是数据的智能目录系统。
二、没有索引时,数据库在做什么?
2.1 全表扫描的详细过程
-- 假设users表有100万条数据,没有索引<