MySQL创建索引核心用CREATE INDEX或建表时INDEX/KEY定义;单列索引适用于高频查询字段;联合索引需遵循最左前缀原则;主键和唯一约束自动建索引;应通过SHOW INDEX查看并及时删除冗余索引。
在 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+ 树索引创建后建议验证是否生效,并定期清理冗余索引:
SHOW INDEX FROM users; 或 SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 'users';
DROP INDEX idx_email ON users;