mysql 索引都有哪些类型:普通 唯一 主键 全文 复合 空间

发布时间:2025-05-13      访问量:19
在MySQL中,索引是提高查询效率的关键工具,不同类型的索引适用于不同的场景。以下是MySQL中常见的索引类型及其特点:


**1. 普通索引(Normal Index)**
- **特点**:最基本的索引类型,没有任何限制,仅用于加速查询。
- **创建语法**:
```sql
CREATE INDEX index_name ON table_name(column_name);
```
- **适用场景**:用于加速WHERE子句中的条件查询。


**2. 唯一索引(Unique Index)**
- **特点**:索引列的值必须唯一,但允许为NULL(如果有多个NULL值)。
- **创建语法**:
```sql
CREATE UNIQUE INDEX index_name ON table_name(column_name);
```
- **适用场景**:用于确保数据的唯一性(如用户表的邮箱、手机号)。


**3. 主键索引(Primary Key Index)**
- **特点**:一种特殊的唯一索引,不允许NULL值,每个表只能有一个主键。
- **创建语法**:
```sql
CREATE TABLE table_name (
id INT PRIMARY KEY, -- 声明主键
...
);
```
- **适用场景**:用于唯一标识表中的每一行数据。


**4. 全文索引(Fulltext Index)**
- **特点**:用于在文本列(如`TEXT`、`VARCHAR`)上进行全文搜索,支持自然语言查询。
- **创建语法**:
```sql
CREATE FULLTEXT INDEX index_name ON table_name(column_name);
```
- **适用场景**:用于全文搜索(如文章内容、评论的关键词搜索)。


**5. 复合索引(联合索引,Composite Index)**
- **特点**:多个列组合创建的索引,遵循“最左前缀匹配原则”。
- **创建语法**:
```sql
CREATE INDEX index_name ON table_name(col1, col2, col3);
```
- **适用场景**:用于多条件查询(如`WHERE col1 = ? AND col2 = ?`)。


**6. 空间索引(Spatial Index)**
- **特点**:对空间数据类型(如`GEOMETRY`、`POINT`)创建的索引。
- **创建语法**:
```sql
CREATE SPATIAL INDEX index_name ON table_name(column_name);
```
- **适用场景**:用于地理信息系统(GIS)中的空间查询(如距离计算、范围查询)。


**7. 哈希索引(Hash Index)**
- **特点**:基于哈希表实现,仅支持等值查询(如`=`、`IN()`),不支持范围查询。
- **创建语法**:
```sql
CREATE TABLE table_name (
...
) ENGINE=InnoDB; -- InnoDB默认使用B-Tree,MEMORY引擎支持哈希索引
```
- **适用场景**:适用于内存表(`MEMORY`引擎)或特定场景下的快速等值查询。


**索引存储结构**
MySQL索引的存储结构主要有两种:
- **B-Tree索引**:InnoDB、MyISAM引擎的默认索引类型,适用于范围查询和排序。
- **哈希索引**:MEMORY引擎支持,仅用于等值查询。


**总结**
选择合适的索引类型取决于具体的业务场景:
- **唯一约束** → 唯一索引或主键索引。
- **全文搜索** → 全文索引。
- **多条件查询** → 复合索引。
- **空间数据** → 空间索引。
- **等值查询为主** → 哈希索引(特定场景)。

合理使用索引可以显著提升查询效率,但过多或不合理的索引会增加写入成本和存储空间开销。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念