mysql索引的类型和作用有哪些

来源:这里教程网 时间:2026-02-28 20:11:43 作者:

MySQL索引是数据库中用于提升数据检索速度的重要机制。合理使用索引可以显著提高查询效率,但也可能增加写操作的开销。下面介绍常见的索引类型及其作用。

1. 普通索引(INDEX)

作用:最基本的索引类型,用于加快数据查询速度,不保证字段的唯一性。

适合用在经常出现在WHERE、JOIN或ORDER BY条件中的列上。

创建方式:CREATE INDEX idx_name ON table(column); 可重复值,无约束限制

2. 唯一索引(UNIQUE INDEX)

作用:确保索引列中的值是唯一的,允许有一个NULL值。

常用于防止数据重复,比如邮箱、身份证号等需要唯一性的字段。

创建方式:CREATE UNIQUE INDEX idx_email ON users(email); 插入重复值会报错

3. 主键索引(PRIMARY KEY)

作用:一种特殊的唯一索引,不允许NULL值,每张表只能有一个主键。

用于唯一标识表中的每一行记录,通常自动创建聚簇索引(InnoDB引擎)。

定义主键时自动创建索引 强烈建议每个表都设置主键

4. 聚簇索引(Clustered Index)

作用:决定数据在磁盘上的物理存储顺序,InnoDB通过主键构建聚簇索引。

查询时直接读取数据页,效率高。如果没有显式定义主键,InnoDB会选择第一个非空唯一索引,否则自动生成隐藏的ROWID。

一张表只有一个聚簇索引 范围查询和排序性能较好

5. 非聚簇索引(Secondary Index / 辅助索引)

作用:索引结构中保存的是主键值,查到索引后需回表查找完整数据。

适用于非主键字段的查询,如状态、类别等常用筛选字段。

也叫二级索引 查询需要“回表”操作

6. 覆盖索引(Covering Index)

作用:查询所需字段全部包含在索引中,无需回表,提升性能。

例如对(name, age)建联合索引,查询SELECT name, age FROM users WHERE name='Tom' 可直接从索引获取数据。

减少I/O操作 推荐在高频查询中使用

7. 联合索引(Composite Index)

作用:多个字段组合成一个索引,遵循最左前缀匹配原则。

例如对(a,b,c)建联合索引,则(a)、(a,b)、(a,b,c)能命中,但(b)、(c)不能。

注意字段顺序 避免冗余单列索引

8. 全文索引(FULLTEXT)

作用:用于大文本字段(如文章内容)的关键词搜索,支持自然语言和布尔模式。

适用于LIKE无法满足的复杂文本检索场景。

MyISAM和InnoDB都支持(MySQL 5.6+) 使用MATCH() ... AGAINST()语法查询

9. 空间索引(SPATIAL)

作用:用于地理空间数据类型(如POINT、GEOMETRY),支持空间关系查询。

仅MyISAM和InnoDB支持 常用于地图类应用

基本上就这些常见索引类型。选择合适的索引能极大提升查询性能,但也要注意不要过度创建,因为索引会占用存储空间并影响INSERT、UPDATE、DELETE的速度。

相关推荐

热文推荐