如何给MySQL数据库表添加索引

给MySQL表添加索引,主要使用 CREATE INDEX 或 ALTER TABLE 语句。

1. 基本语法

使用 CREATE INDEX(推荐)

CREATE INDEX 索引名 ON 表名 (列名);

使用 ALTER TABLE

ALTER TABLE 表名 ADD INDEX 索引名 (列名);

2. 常见索引类型

普通索引

-- 单列索引

CREATE INDEX idx_name ON users (name);

-- 复合索引(多列)

CREATE INDEX idx_name_age ON users (name, age);

唯一索引(不允许重复值)

CREATE UNIQUE INDEX idx_email ON users (email);

主键索引(通常在建表时指定)

ALTER TABLE users ADD PRIMARY KEY (id);

全文索引(用于文本搜索)

CREATE FULLTEXT INDEX idx_content ON articles (content);

3. 实际示例

假设有一个 users 表:

CREATE TABLE users (

id INT PRIMARY KEY,

name VARCHAR(50),

email VARCHAR(100),

age INT,

city VARCHAR(50)

);

添加索引:

-- 为 name 列添加普通索引

CREATE INDEX idx_name ON users (name);

-- 为 email 添加唯一索引

CREATE UNIQUE INDEX idx_email ON users (email);

-- 复合索引(查询同时用到 name 和 age 时效率高)

CREATE INDEX idx_name_age ON users (name, age);

4. 查看已添加的索引

SHOW INDEX FROM users;

5. 删除索引

DROP INDEX idx_name ON users;

-- 或

ALTER TABLE users DROP INDEX idx_name;

6. 注意事项

不要过度索引:每个索引都会占用磁盘空间,并降低 INSERT、UPDATE、DELETE 的性能

区分度高的列适合建索引:如身份证号、手机号

频繁作为 WHERE 条件的列:适合建索引

复合索引遵循最左前缀原则:(a,b,c) 索引可支持 a、a,b、a,b,c 的查询

避免在低区分度列建索引:如性别(只有男/女)