如何给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的查询 - 避免在低区分度列建索引:如性别(只有男/女)
网站:http://shibowl.top
github:https://github.com/hanbinjxnc
博客园:https://www.cnblogs.com/hool
博客:https://blog.shibowl.top
淘宝店:https://boxunwl.taobao.com/
作者:世博 2019年4月28日----
github:https://github.com/hanbinjxnc
博客园:https://www.cnblogs.com/hool
博客:https://blog.shibowl.top
淘宝店:https://boxunwl.taobao.com/
作者:世博 2019年4月28日----
浙公网安备 33010602011771号