在 MySQL 中,CREATE INDEX 和 ALTER TABLE … ADD INDEX 两种方式最终效果完全相同

生产建议:使用 ALGORITHM=INPLACE, LOCK=NONE 在线创建索引(需引擎支持)

ALTER TABLE `XXX`.device ADD INDEX `idx_device_id` (`device_id`), ALGORITHM=INPLACE,LOCK=NONE;

两种方式的不同:
设计哲学不同
CREATE INDEX:专注索引操作,语义明确为“创建索引”
ALTER TABLE:表结构修改命令,索引只是其子操作

操作原子性差异

– 单条语句创建多个索引(MySQL 8.0+)
CREATE INDEX idx1 ON t(col1), INDEX idx2 ON t(col2);

– ALTER TABLE 需分次执行或合并
ALTER TABLE t
ADD INDEX idx1 (col1),
ADD INDEX idx2 (col2); – 8.0+ 支持合并

全文索引(FULLTEXT):
ALTER TABLE:✅ 直接支持
ALTER TABLE articles ADD FULLTEXT idx_content (content);
CREATE INDEX:❌ MySQL 5.6 前不支持,5.6+ 已兼容