MySQL 索引优化:B+树原理与最左前缀原则
索引是数据库性能优化的核心手段,理解其底层原理是高效使用的前提。
1. B+树索引结构
- B+树所有数据存储在叶子节点,内部节点只存键值和指针,每个叶子节点通过链表相连。
- 支持范围查询和等值查询,复杂度 O(log n)。
- InnoDB 主键索引的叶子节点存储完整行数据(聚簇索引),二级索引存储主键值。
2. 最左前缀原则
复合索引 (a, b, c) 在查询条件中必须使用最左边列才能生效,且按顺序匹配。
CREATE INDEX idx_a_b_c ON table(a, b, c);
-- 有效:使用 a 或 a+b 或 a+b+c
SELECT * FROM table WHERE a = 1;
SELECT * FROM table WHERE a = 1 AND b = 2;
SELECT * FROM table WHERE a = 1 AND b = 2 AND c = 3;
-- 无效:跳过 a 或只用 b、c
SELECT * FROM table WHERE b = 2; -- 不命中
SELECT * FROM table WHERE a = 1 AND c = 3; -- 只命中 a 部分3. 索引选择建议
- 区分度高的列优先。
- 经常作为查询条件、排序、分组的列建索引。
- 避免在索引列上使用函数或计算,否则索引失效。
4. 查看索引使用情况
EXPLAIN SELECT * FROM user WHERE age > 20;
SHOW INDEX FROM user;合理设计索引可使查询性能提升数倍。
