1. 索引基础:数据库的"目录系统"
想象一下你在图书馆找一本《高性能MySQL》,没有目录和索引卡的情况下,你需要从第一排书架开始逐本翻阅。MySQL的索引机制就像图书管理员精心编制的分类目录,它能让你快速定位到特定主题的书籍所在区域。
索引的本质是有序数据结构,通常是B+树(默认引擎InnoDB的选择)或哈希表(Memory引擎支持)。以最常用的B+树为例,它的三层结构可以支撑约2000万行数据查询仅需3次I/O操作。我曾在用户表500万数据量时做过测试,无索引的WHERE username='张三'查询耗时1.8秒,添加索引后仅需0.002秒。
注意:虽然索引能加速查询,但每个索引都会占用存储空间(约字段大小的1/3)并降低写操作性能。我曾遇到过一个案例,某电商系统在商品表上建了11个索引,导致促销期间库存更新出现严重延迟。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 索引类型选型实战
2.1 基础索引类型对比
| 索引类型 | 适用场景 | 限制条件 | 我的使用建议 |
|---|---|---|---|
| 普通索引 | 等值查询、范围查询 | 无 | 最常用,优先考虑 |
| 唯一索引 | 需要约束唯一性的字段 | 字段值必须唯一 | 替代普通索引+应用层校验 |
| 主键索引 | 行标识符 | 非空且唯一 | 必须要有,建议自增INT |
| 组合索引 | 多条件联合查询 | 遵循最左前缀原则 | 将高频条件放左边 |
