mysql如何给已有数据表添加索引_使用CREATE INDEX提升查询速度

张开发
2026/4/18 3:52:42 15 分钟阅读

分享文章

mysql如何给已有数据表添加索引_使用CREATE INDEX提升查询速度
MySQL建索引需严格校验语法、字段与表名优先用ALTER TABLE ADD INDEX复合索引顺序须匹配查询条件避免冗余索引大表操作选低峰期唯一索引承载约束语义建索引后需ANALYZE TABLE更新统计信息。CREATE INDEX 语法写错会直接报错不是静默失败MySQL 对 CREATE INDEX 的语法很敏感尤其字段名、表名、索引类型稍有拼写或大小写不一致在区分大小写的文件系统上就会报 ERROR 1146 (42S02): Table doesnt exist 或 ERROR 1054 (42S22): Unknown column。别急着怀疑权限先核对三件事SHOW TABLES 确认表名完全匹配含数据库前缀如 mydb.usersDESCRIBE table_name 或 SHOW COLUMNS FROM table_name 看字段名是否带反引号、是否真存在单列索引不用写 USING BTREE但复合索引里如果漏了括号比如写成 CREATE INDEX idx ON t a,b缺 (a,b)会报语法错误WHERE 条件里用不到的字段加索引纯属浪费索引不是越多越好。比如表有 user_id、status、created_at 三个字段但所有查询都是 WHERE status ?那给 created_at 单独建索引几乎没用。真正该做的是用 EXPLAIN SELECT ... 看 key 列是否命中现有索引复合索引顺序很重要WHERE status ? AND created_at ? 应建 INDEX(status, created_at)反过来则可能失效如果经常 ORDER BY created_at 且带 LIMIT把 created_at 放复合索引末尾能避免 filesortALTER TABLE ADD INDEX 比 CREATE INDEX 更常用但锁表风险更高虽然 CREATE INDEX idx ON t(col) 和 ALTER TABLE t ADD INDEX idx(col) 效果一样但实际运维中更倾向后者因为它是 DDL 标准写法工具链如 pt-online-schema-change也默认识别它。不过要注意 Cleanup.pictures 智能移除图片中的物体、文本、污迹、人物或任何不想要的东西

更多文章