首页 > 文章 > MySQL 索引优化实战:从原理到最佳实践

MySQL 索引优化实战:从原理到最佳实践

📅 2024-06-10 📂 技术 👁️ 2340 次阅读

为什么索引如此重要?

在数据量达到百万级别时,没有索引的全表扫描可能需要数秒甚至数十秒,而有索引的查询通常在毫秒级完成。

B+Tree 索引原理

MySQL InnoDB 引擎默认使用 B+Tree 数据结构来组织索引。B+Tree 是一棵平衡多路搜索树,所有数据都存储在叶子节点中,叶子节点通过双向链表连接,非常适合范围查询。

最左前缀原则

联合索引遵循"最左前缀"原则。假设有一个联合索引 (a, b, c):

  • ✅ WHERE a = 1 — 可以使用索引
  • ✅ WHERE a = 1 AND b = 2 — 可以使用索引
  • ✅ WHERE a = 1 AND c = 3 — 只能用到 a 列
  • ❌ WHERE b = 2 — 无法使用索引
  • ❌ WHERE c = 3 — 无法使用索引

避免索引失效的常见场景

1. 在索引列上使用函数或运算:WHERE YEAR(create_time) = 2024

2. 隐式类型转换:WHERE phone = 13800000000(phone 是 varchar)

3. LIKE 以 % 开头:WHERE name LIKE '%test'

使用 EXPLAIN 分析

EXPLAIN SELECT * FROM articles
WHERE status = 'published'
ORDER BY published_at DESC;
关键指标:type 列应尽量达到 ref 或 const 级别,避免 ALL 全表扫描。
🏠首页
📞电话
💬短信
👤联系