← 返回文章列表
数据库·681 次阅读

MySQL 索引为什么能加速查询?

MySQL 索引为什么能加速查询?

没有索引时

SELECT * FROM posts WHERE slug = 'event-loop';

MySQL 只能从头扫描全表(全表扫描),100 万行就要比对 100 万次。

B+ 树索引

InnoDB 的索引底层是 B+ 树,它是一棵矮胖的多路平衡树:

  • 非叶子节点只存键值和指针
  • 数据(或主键)都存在叶子节点
  • 叶子节点之间用链表相连,非常适合范围查询

3~4 层的 B+ 树就能支撑千万级数据,意味着任意一次查询只要 3~4 次磁盘 I/O。

创建索引

CREATE INDEX idx_posts_slug ON posts (slug);

查看执行计划确认是否命中:

EXPLAIN SELECT * FROM posts WHERE slug = 'event-loop';

type 列出现 ref、key 列显示索引名,就说明走了索引。

注意事项

  • 索引不是越多越好:写入时需要维护索引,会降低 INSERT/UPDATE 性能
  • 遵循最左前缀原则设计联合索引
  • 对区分度低的字段(如状态只有 0/1)建索引意义不大
  • 用 LIKE '%xxx' 前导通配符会让索引失效

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4