---
title: MySQL索引类型有哪些
published: 2025-08-14
description: ""
image: ""
tags: [索引, MySQL]
category: "中间件 > MySQL"
draft: false
lang: ""
---

# MySQL 索引类型有哪些

## 按数据结构分

分为

- B-Tree 索引
- Hash 索引
- Full-text 索引

![](https://blog.meowrain.cn/api/i/2025/08/15/5dxy1-1.webp)

创建表的时候，InnoDB 存储引擎会根据不同的场景选择不同的列作为索引：

- 有主键：会使用主键作为聚簇索引的索引键
- 没有主键： 选择第一个不包含 NULL 值的唯一列作为聚簇索引的索引键
- 上面两个都没有的情况下，InnoDB 会自动生成一个隐式自增 id 列作为聚簇索引的索引键。

其他索引都属于辅助索引，也就是非聚簇索引或者二级索引。

## 按物理存储分

分为

- 聚簇索引（主键索引）
- 二级索引（辅助索引）

## 按字段特性分

- 主键索引
- 唯一索引
- 普通索引
- 前缀索引

主键索引是唯一的，且不允许为 NULL。每个表只能有一个主键索引。

## 按字段个数分

- 单列索引
- 联合索引

---

# 按数据结构分

- B+树索引
- 哈希索引
- 倒排索引（Full-text 索引）
- R-树索引 （多维树空间）

从 InnoDB b+树索引来看，分为聚簇索引和非聚簇索引
聚簇索引也就是主键索引，叶子节点存储整行的数据，非叶子节点存储主键值和指向子节点的指针。
非聚簇索引叶子节点存储主键，非叶子节点存储主键值和指向子节点的指针。
因此，非聚簇索引查询需要回表查询

# 从索引性质看

有
普通索引
主键索引
唯一索引
联合索引
全文索引
空间索引
