在 MySQL 中创建索引,核心是使用 CREATE INDEX 语句或在建表时通过 INDEX / KEY 关键字定义。索引能显著提升查询速度,但会略微降低写入性能并占用额外磁盘空间,因此需按需创建、避免滥用。
单列索引的创建方法
最常用的方式是为单个字段建立普通索引。语法简洁,适合高频查询条件字段(如 user_id、email):
建表后添加:CREATE INDEX idx_email ON users(email);建表时直接定义:
CREATE TABLE users (id INT, email VARCHAR(100), INDEX idx_email (email));
联合索引与最左前缀原则
当查询常同时用到多个字段(如 WHERE status = 1 AND category = 'A'),可建联合索引提升效率。注意:MySQL 遵循最左前缀匹配规则,查询条件必须从索引最左侧字段开始连续使用才有效:
创建联合索引:CREATE INDEX idx_status_category ON products(status, category);该索引可加速
WHERE status = 1或
WHERE status = 1 AND category = 'A',但对
WHERE category = 'A'无效
主键索引和唯一索引的自动创建
主键(PRIMARY KEY)和唯一约束(UNIQUE)会自动创建对应索引,无需额外操作:
CREATE TABLE orders (order_id INT PRIMARY KEY, order_no VARCHAR(20) UNIQUE);—— 此时 order_id 和 order_no 各自拥有一个 B+ 树索引 若已有数据且字段值不唯一,添加 UNIQUE 索引会失败,需先去重
查看和删除索引
创建后建议验证是否生效,并定期清理冗余索引:
查看表索引:SHOW INDEX FROM users;或
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 'users';删除索引:
DROP INDEX idx_email ON users;避免重复索引(如已有联合索引 (a,b),再单独建 (a) 就可能冗余)
