Mysql
MySQL 是否仍然以這種方式處理索引?
在 MySQL 中刪除重複索引需要相當長的時間,所以在我等待的時候,我搜尋了它並找到了 2006 年的這篇文章,談論 MySQL 如何處理
ADD
和DROP
索引。如果表 T 是具有四個索引 (ndx1,ndx2,ndx3,ndx4) 的 MySQL 表,並且您想要 ‘alter table T drop index ndx3;’ 這正是幕後發生的事情:
- MySQL 將 T.MYD 複製到一個臨時表,即 S.MYD 和一個零字節的 S.MYI。2) MySQL 確實 ‘alter table S add index ndx1 (…); 3) MySQL 確實 ‘alter table S add index ndx2 (…); 4) MySQL 確實 ‘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;這將創建一個具有索引 ndx1、ndx2、ndx3 和 ndx4 的空表 T1。2)alter table T1 drop index ndx3;這會在空 T1 上刪除索引 ndx3,這應該是瞬時的。3) 插入T1 select * from T; 這將填充表 T 並一次性載入 T1 的所有三 (3) 個索引。4)刪除表表T;5) 將表 T1 重命名為 T;
你們都是如何處理從大表中添加和刪除索引的?
這就是 MySQL 4.x 的做法,它曾經嚴重地激怒了我。
事實上,我計算了一個公式來計算需要多少次這樣的指數操作
Table with 0 indexes and adding 1 index tooks 1 temp table Table with 1 index and adding 1 index tooks 3 temp tables Table with 2 indexes and adding 1 index tooks 6 temp tables Table with 3 indexes and adding 1 index tooks 10 temp tables (I had eyewitnessed this !!!) . . . Table with n indexes and adding 1 index took (n + 1) X (n + 2) / 2 temp tables . . . Table with 16 indexes and adding 1 index took 153 temp tables
好消息,MySQL 5.x 不這樣做!
如果 MySQL 5.x 做到了這一點,我今天將成為一名 PostgreSQL DBA(無意冒犯 PostgreSQL,它本身就是一個出色的 RDBMS)。
更新
天哪,我看了文章!!!那個文章是我發的!!!
我從沒想過有人會探勘這個文章。
請讓這樣的東西死去並埋葬。現在我有閃回!