索引全生命周期管理命令速查,含 ALTER TABLE、CREATE INDEX、REPAIR TABLE、SHOW INDEX、DROP INDEX 五大類,附參數說明與示例。
-- ALTER TABLE 方式(推薦,支持多索引單條語句)
ALTER TABLE `t` ADD INDEX `idx_name` (`name`);
ALTER TABLE `t` ADD UNIQUE INDEX `uk_email` (`email`);
ALTER TABLE `t` ADD PRIMARY KEY (`id`); -- 僅無主鍵時
ALTER TABLE `t` ADD INDEX `idx_multi` (`a`,`b`); -- 聯合索引
-- CREATE INDEX 方式(不支持主鍵)
CREATE INDEX `idx_name` ON `t` (`name`);
CREATE UNIQUE INDEX `uk_email` ON `t` (`email`);
-- 快速重建(MyISAM/InnoDB 5.6+ Online DDL)
REPAIR TABLE `t` QUICK;
-- 或
OPTIMIZE TABLE `t`; -- 同時整理碎片、更新統計
-- 或 5.6+
ALTER TABLE `t` ENGINE=InnoDB; -- 重建表、重建所有索引
SHOW INDEX FROM `t`\G;
SHOW KEYS FROM `t`\G; -- 等價
-- 關鍵列:Key_name, Seq_in_index, Column_name, Non_unique, Cardinality, Sub_part, Index_type
-- DROP INDEX(需指定索引名)
DROP INDEX `idx_name` ON `t`;
-- ALTER TABLE 方式
ALTER TABLE `t` DROP INDEX `idx_name`;
ALTER TABLE `t` DROP PRIMARY KEY; -- 僅刪主鍵,無需索引名
SELECT
INDEX_NAME, COLUMN_NAME, SEQ_IN_INDEX, NON_UNIQUE, CARDINALITY, SUB_PART, INDEX_TYPE
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 't'
ORDER BY INDEX_NAME, SEQ_IN_INDEX;
REPAIR TABLE 僅 MyISAM 有效,InnoDB 用 OPTIMIZE 或 ALTER ENGINE。DROP PRIMARY KEY 不需索引名。收藏此頁,索引增刪改查手到擒來。