MySQL作为常用的关系型数据库,索引是优化查询性能的重要手段,其中normal、unique、full text是三种使用频率较高的索引类型,三者在功能、约束和适用场景上存在显著差异。

三种索引的基础定义
normal索引
normal索引也就是普通索引,是MySQL中最基础的索引类型,没有任何约束性。它的核心作用就是提升查询效率,允许索引列存储重复的值,也允许该列的值为空。如果业务中只是需要加快某列的查询速度,没有唯一性或者全文检索的需求,就可以选择创建normal索引。
unique索引
unique索引是唯一索引,除了具备普通索引的查询加速功能外,还会对索引列的值施加唯一性约束。也就是说,索引列的所有值都不能重复,但是允许该列有多个空值,因为MySQL中空值不等于空值,不会触发唯一性冲突。这种索引适合用来存储邮箱、手机号、身份证号这类需要保证唯一性的字段。
full text索引
full text索引是全文索引,主要用于文本类型的字段,比如CHAR、VARCHAR、TEXT类型的列。它的作用是支持全文检索,也就是可以快速匹配文本中包含某个关键词的记录,而不是像普通索引那样只能做精确的等值匹配或者前缀匹配。全文索引适合用在文章内容、商品描述这类长文本的检索场景。
核心区别对比
| 对比维度 | normal索引 | unique索引 | full text索引 |
|---|---|---|---|
| 唯一性约束 | 无,允许重复值 | 有,值不能重复(允许多个空值) | 无,允许重复值 |
| 适用字段类型 | 所有支持索引的字段类型 | 所有支持索引的字段类型 | 仅支持CHAR、VARCHAR、TEXT类型 |
| 主要作用 | 加速普通查询 | 加速查询+保证字段唯一性 | 支持长文本的全文关键词检索 |
| 查询支持方式 | 等值、范围、前缀匹配等 | 等值、范围、前缀匹配等 | 仅支持MATCH AGAINST全文检索语法 |
创建方式示例
创建normal索引
可以在建表时直接创建,也可以后续给已有表添加:
-- 建表时创建normal索引
CREATE TABLE user_info (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
age INT,
-- 给username列创建normal索引
INDEX idx_username (username)
);
-- 给已有表添加normal索引
ALTER TABLE user_info ADD INDEX idx_age (age);
创建unique索引
创建方式和普通索引类似,只需要把INDEX换成UNIQUE:
-- 建表时创建unique索引
CREATE TABLE user_account (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100),
-- 给email列创建unique索引,保证邮箱唯一
UNIQUE INDEX idx_email (email)
);
-- 给已有表添加unique索引
ALTER TABLE user_account ADD UNIQUE INDEX idx_phone (phone);
创建full text索引
全文索引创建时需要使用FULLTEXT关键字,并且只能用在文本类型的字段上:
-- 建表时创建full text索引
CREATE TABLE article (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
content TEXT,
-- 给content列创建全文索引
FULLTEXT INDEX idx_content (content)
);
-- 给已有表添加full text索引
ALTER TABLE article ADD FULLTEXT INDEX idx_title (title);
使用场景说明
如果业务中只是需要加快某个字段的查询速度,比如经常根据用户的年龄筛选用户,就可以给年龄字段加normal索引。如果需要保证某个字段的值不重复,比如用户注册时的邮箱、手机号,就适合用unique索引,插入重复值的时候数据库会直接报错,避免脏数据产生。如果是做文章搜索、商品描述搜索这类需要匹配文本内容中关键词的需求,就适合用full text索引,用MATCH(content) AGAINST('关键词')的语法来查询,比用LIKE '%关键词%'的效率高很多。
注意:全文索引在MyISAM和InnoDB引擎中都支持,但是不同的存储引擎对全文索引的支持细节有差异,比如InnoDB的全文索引不支持中文分词,需要配合ngram解析器使用才能正常检索中文内容。
mysqlnormal_indexunique_indexfull_text_index修改时间:2026-06-17 13:36:39