一、索引定义
索引是帮助 MySQL 高效获取数据的有序数据结构。数据库在原始数据之外,额外维护满足特定查找算法的数据结构,这些结构以引用方式指向数据,从而实现高效查询。
二、索引优缺点
表格
| 优势 | 劣势 |
|---|---|
| 提高数据检索效率,降低数据库 I/O 成本 | 索引列需要占用额外存储空间 |
| 通过索引列对数据排序,降低排序成本与 CPU 消耗 | 会降低表更新速度(INSERT/UPDATE/DELETE 操作时需同步维护索引) |
三、主流索引结构
MySQL 索引在存储引擎层实现,不同引擎支持的结构不同:
表格
| 索引结构 | 核心描述 |
|---|---|
| B+Tree 索引 | 最常见类型,大部分存储引擎都支持,适合范围查询与排序 |
| Hash 索引 | 底层为哈希表,仅支持精确匹配查询,不支持范围查询 |
| R-tree 索引 | MyISAM 引擎专属空间索引,用于地理空间数据类型,使用较少 |
| Full-text 全文索引 | 基于倒排索引实现,用于快速匹配文档,类似 Lucene/Solr/ES |
四、存储引擎对索引的支持情况
表格
| 索引类型 | InnoDB | MyISAM | Memory |
|---|---|---|---|
| B+Tree 索引 | 支持 | 支持 | 支持 |
| Hash 索引 | 不支持 | 不支持 | 支持 |
| R-tree 索引 | 不支持 | 支持 | 不支持 |
| Full-text 索引 | 5.6 版本之后支持 | 支持 | 不支持 |
