在 MySQL 中删除重复索引需要相当长的时间,所以在等待期间我搜索了它并找到了这篇2006 年的帖子,讨论 MySQL 如何处理ADD
和DROP
索引。
如果表 T 是具有四个索引(ndx1、ndx2、ndx3、ndx4)的 MySQL 表,并且您想要“更改表 T 删除索引 ndx3;” 这正是引擎盖下发生的事情:
1) MySQL 将 T.MYD 复制到一个临时表,即 S.MYD 和一个零字节的 S.MYI。2) MySQL does 'alter table S add index ndx1 (...); 3) MySQL does 'alter table S add index ndx2 (...); 4) MySQL does 'alter table S add index ndx4 (...); 5)MySQL删除T.MYD,删除T.MYI 6)MySQL将S.MYD重命名为T.MYD,将S.MYI重命名为T.MYI
这仍然是真的吗?他的建议仍然有效吗?
给定具有四个索引(ndx1、ndx2、ndx3、ndx4)的同一个 MyISAM 表 T,并且您想“更改表 T 删除索引 ndx3;” 试试这个:
1)像T一样创建表T1;这将创建一个空表 T1,其索引为 ndx1、ndx2、ndx3 和 ndx4。2) 改变表 T1 删除索引 ndx3;这会在空的 T1 上删除索引 ndx3,这应该是瞬时的。3) 插入到 T1 select * from T; 这将填充表 T 并一次加载 T1 的所有三 (3) 个索引。4) 删除表表T;5) 改变表 T1 重命名为 T;
你们都如何处理在大型表中添加和删除索引?
这就是 MySQL 4.x 的做法,它曾经让我非常恼火。
事实上,我有一个公式计算需要多少这样的索引操作
好消息,MySQL 5.x 不会那样做!!!
如果 MySQL 5.x 做到了这一点,我今天就会成为一名 PostgreSQL DBA(不要冒犯 PostgreSQL,它本身就是一个优秀的 RDBMS)。
更新
哦,天哪,我看了帖子!!!那个帖子是我发的!!!
我从没想过有人会把这篇文章挖出来。
请让这样的东西死去埋葬。现在我有闪回!