SQL 索引速查:CREATE / DROP / SHOW INDEX 用法全解
在数据库优化中,索引(Index) 是最关键的性能工具之一。
无论你是后端开发、数据分析师,还是在准备数据库面试,
都必须掌握索引的创建、删除和查看命令。
本文将带你系统梳理三大核心命令:
👉 CREATE INDEX、DROP INDEX、SHOW INDEX,
并配合常见实战场景,帮你一文掌握索引操作要点。
一、什么是索引(Index)
索引就像书本的“目录”,
它能让数据库在查找数据时不需要全表扫描,
而是通过索引快速定位目标记录,从而极大提升查询速度。
举个例子:
当你执行
SELECT * FROM users WHERE email = 'test@example.com';
如果没有索引,数据库会一行一行扫描整张表;
但如果 email 字段上有索引,数据库能立刻定位那一行。
二、CREATE INDEX —— 创建索引
语法格式
CREATE INDEX index_name
ON table_name (column_name);
这条语句会在指定表的某个字段上创建索引。
比如,你想在用户表 users 的 email 字段上建立索引,可以写:
CREATE INDEX idx_email ON users (email);
📌 注意事项:
索引名建议有前缀,比如 idx_字段名,方便维护;
单列索引适合频繁出现在 WHERE 或 JOIN 条件中的字段;
不建议给低选择性的字段建索引,比如性别、布尔类型等。
三、CREATE UNIQUE INDEX —— 创建唯一索引
唯一索引能保证字段值不重复。
例如用户邮箱通常应唯一:
CREATE UNIQUE INDEX idx_unique_email ON users (email);
当插入重复的邮箱时,数据库会直接报错,
从而保证数据的唯一性。
四、CREATE INDEX 多字段联合索引
当你经常根据多个字段进行查询时,可以建立联合索引。
例如:
CREATE INDEX idx_name_age ON users (name, age);
⚠️ 记住联合索引的最左前缀原则:
如果创建的是 (name, age) 索引,那么:
能用到索引的查询:WHERE name = 'Tom' 或 WHERE name = 'Tom' AND age = 25
不能用到索引的查询:WHERE age = 25(因为跳过了最左列)
五、DROP INDEX —— 删除索引
索引并不是越多越好。
如果字段更新频繁或索引长期不被使用,就需要删除。
语法如下:
DROP INDEX index_name ON table_name;
示例:
DROP INDEX idx_email ON users;
删除后,查询会重新回到全表扫描模式。
因此在删除前,最好通过 EXPLAIN 查看索引使用情况。
六、SHOW INDEX —— 查看索引
如果想知道当前表有哪些索引,可以用:
SHOW INDEX FROM table_name;
例如:
SHOW INDEX FROM users;
数据库会列出:
索引名称
索引字段
是否唯一
索引类型(BTree、FULLTEXT、HASH)
这对调试与优化非常有帮助。
七、实战建议与优化技巧
合理使用索引
经常出现在 WHERE、JOIN、ORDER BY 中的字段值得建索引。
不要盲目建太多索引,否则写入性能会显著下降。
命名规范
普通索引:idx_column
唯一索引:uniq_column
联合索引:idx_col1_col2
定期检查无用索引
使用 SHOW INDEX + EXPLAIN 结合慢查询日志,
判断哪些索引长期未被使用。
避免函数操作导致索引失效
比如:
WHERE DATE(create_time) = '2025-10-11'
会让索引失效,建议改为:
WHERE create_time >= '2025-10-11' AND create_time < '2025-10-12'
八、总结
本文快速梳理了三大核心命令:
CREATE INDEX —— 创建普通、唯一、联合索引
DROP INDEX —— 删除索引
SHOW INDEX —— 查看索引信息
📌 面试高频提示:
索引的本质是提高查询效率;
创建索引要结合查询场景;
滥用索引可能反而拖慢写入性能。
学会合理使用索引,是从“写 SQL”到“优化 SQL”的第一步。