| 分类 | 含义 | 特点 | 关键字 |
|---|---|---|---|
| 主键索引 | 针对于表中主键创建的索引 | 默认自动创建,只能有一个 | PRIMARY |
| 唯一索引 | 避免同一个表中某数据列中的值重复 | 可以有多个 | UNIQUE |
| 常规索引 | 快速定位特定数据 | 可以有多个 | |
| 全文索引 | 全文索引查找的是文本中的关键词,而不是比较索引中的值 | 可以有多个 | FULLTEXT |
InnoDB中索引的分类:
| 分类 | 含义 | 特点 |
|---|---|---|
聚集索引 | 将数据存储与索引放一块,索引结构的叶子节点保存了行数据 | 必须有且只有一个 |
非聚集索引 | 将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键 | 可以存在多个 |
聚集索引又叫聚簇索引,每个 InnoDB 表都必须有且只有一个聚簇索引 ,聚簇索引使用 B+Tree 构建,叶子节点存储的数据是整行记录。InnoDB 创建索引的具体规则如下:
案例
SELECT * FROM user_innodb WHERE id = 28;
InnoDB 的数据和索引存储在一个文件 t_user_innodb.ibd 中。InnoDB 的数据组织方式是聚簇索引。
先在主键树中从根节点开始检索,将根节点加载到内存,比较28<75,走左路。(第一次磁盘IO)
将左子树节点加载到内存中,比较16<28<47,向下检索。(第二次磁盘IO)
检索到叶节点,将节点加载到内存中遍历,比较16<28,18<28,28=28。查找到值等于28的索引项,直接可以获取整行数据。将改记录返回给客户端。(第三次磁盘IO)

非聚集索引又叫二级索引、辅助索引,除聚簇索引之外的所有索引都称为非聚集索引。在 InnoDB 中,辅助索引中的叶子节点存储的数据是该行的主键值。 在检索时,InnoDB 使用此主键值在聚簇索引中搜索行记录。
使用二级索引需要检索两遍索引:首先检索辅助索引获得主键,然后使用主键到聚集索引中检索获得整行记录。
案例
SELECT * FROM t_user_innodb WHERE age=19;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrTHvA0Z-1662625446202)(C:/Users/10642/AppData/Roaming/Typora/typora-user-images/image-20220902143600943.png)]](https://1000bd.com/contentImg/2023/11/04/223315673.png)