Skip to content

存储引擎与索引

常见存储引擎(提要)

引擎事务锁粒度典型场景
InnoDB(默认)支持 ACID行锁绝大多数 OLTP,需要事务与外键
MyISAM不支持表锁只读或允许表锁的旧系统(新项目少用)
Memory不支持表锁临时数据、易失缓存表

生产环境 默认使用 InnoDB;引擎在表级 ENGINE=InnoDB 指定。


索引原理(B+ 树)

InnoDB 聚簇索引的 叶子节点存完整行数据(按主键顺序);二级索引叶子存 主键值。查询沿 B+ 树定位,复杂度约 O(log n)


索引类型(按用途)

类型说明
主键索引唯一且非空,一张表一个
唯一索引列值唯一;列可为 NULL 时,因 SQL 中 NULLNULL 不可比,多行 NULL 通常可同时存在(与业务是否允许「未知」重复无关,需在应用层约束)
普通索引加速 WHERE / JOIN / ORDER BY
联合索引多列顺序遵循 最左前缀
覆盖索引索引列已含查询所需全部字段,减少回表

使用建议

适合建索引: 高选择性、频繁作为条件或连接的列。
慎用: 低基数字段单独索引、过多索引拖慢写入。
联合索引列顺序: 区分度高的靠前;兼顾排序需求。

避免对索引列做 函数包裹(如 WHERE YEAR(col)=2024)导致无法走索引(可改成范围条件)。


小结

引擎选 InnoDB;索引为 权衡读写 的工具,配合 EXPLAIN 分析执行计划再迭代。