在MySQL数据库中,索引能够大幅提升数据查询的速度,CREATE INDEX语句是官方提供的用于创建索引的标准SQL语句,掌握它的基本语法是数据库开发和维护的基础技能。
CREATE INDEX基本语法结构
标准的CREATE INDEX语句语法如下,其中方括号包裹的内容为可选参数:
-- 基础语法 CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名称 ON 表名 (列名1 [ASC|DESC], 列名2 [ASC|DESC], ...);
语法中各个部分的含义如下:
- UNIQUE:可选参数,添加后创建的是唯一索引,要求索引列的值不能重复,但允许为空
- FULLTEXT:可选参数,添加后创建的是全文索引,仅支持MyISAM和InnoDB引擎的CHAR、VARCHAR、TEXT类型列
- SPATIAL:可选参数,添加后创建的是空间索引,用于地理空间数据类型
- 索引名称:自定义索引的名称,同一个表中索引名称不能重复
- 表名:要创建索引的目标表名称
- 列名:要添加索引的列,可以指定多列创建联合索引,ASC表示升序,DESC表示降序,默认是升序
不同场景的创建示例
创建普通索引
普通索引是最常用的索引类型,没有唯一性限制,示例代码如下:
-- 给user表的username列创建普通索引,索引名为idx_username CREATE INDEX idx_username ON user (username);
创建唯一索引
唯一索引可以保证索引列的值不重复,适合用于手机号、邮箱这类需要唯一约束的字段:
-- 给user表的phone列创建唯一索引,索引名为idx_unique_phone CREATE UNIQUE INDEX idx_unique_phone ON user (phone);
创建联合索引
如果查询经常同时用到多个列,可以创建联合索引提升查询效率:
-- 给user表的age和create_time列创建联合索引,索引名为idx_age_create_time CREATE INDEX idx_age_create_time ON user (age ASC, create_time DESC);
创建全文索引
全文索引用于大文本内容的模糊查询,比LIKE语句效率更高:
-- 给article表的content列创建全文索引,索引名为idx_fulltext_content CREATE FULLTEXT INDEX idx_fulltext_content ON article (content);
语法使用注意事项
使用CREATE INDEX语句时需要注意以下几点:
- 创建索引会消耗一定的时间和磁盘空间,不建议给所有列都创建索引
- 主键默认会自动创建唯一索引,不需要额外使用CREATE INDEX语句创建
- 如果表数据量很大,创建索引的过程可能会锁表,建议在业务低峰期操作
- 联合索引遵循最左前缀原则,查询条件需要包含联合索引的最左列才能生效
如果要删除已经创建的索引,可以使用DROP INDEX 索引名称 ON 表名;语句,操作前建议先确认索引是否还在被业务使用。
MySQLCREATE_INDEX索引创建数据库优化修改时间:2026-07-02 20:18:33