给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 的查询
避免在低区分度列建索引:如性别(只有男/女)