为什么删除 MyISAM 表上的索引这么慢?我无法想象我会有 7 亿条记录和下降索引的社交网络。
只有一列索引,都是全文(我需要切换到普通索引,因为InnoDB不喜欢全文)
下降指数
mysql> DROP INDEX `post_text` ON phpbb_posts;
Query OK, 251171 rows affected (7 min 35.04 sec)
Records: 251171 Duplicates: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
但是,ALTER TABLE 比 DROP 快吗?
mysql> ALTER TABLE phpbb_posts DROP INDEX `post_content`;
Query OK, 251182 rows affected (1 min 45.06 sec)
Records: 251182 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE phpbb_posts DROP INDEX `post_subject`;
Query OK, 251188 rows affected (1 min 32.55 sec)
Records: 251188 Duplicates: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
甚至有一个错误报告,但没有有效的解决方案。
问题:
如果您想对索引的删除进行微观管理,为什么不自己自动化?
CREATE TABLE phpbb_posts_new LIKE phpbb_posts;
ALTER TABLE phpbb_posts_new DROP INDEX post_text;
ALTER TABLE phpbb_posts_new DISABLE KEYS;
INSERT INTO phpbb_posts_new SELECT * FROM phpbb_posts;
ALTER TABLE phpbb_posts_new ENABLE KEYS;
ALTER TABLE phpbb_posts RENAME phpbb_posts_old;
ALTER TABLE phpbb_posts_new RENAME phpbb_posts;
DROP TABLE phpbb_posts_old;
Run Code Online (Sandbox Code Playgroud)
这基本上就是做 ALTER TABLE 会在“幕后”做的事情
这样做可以让您看到每个内部步骤的时间安排。
更新 2011-10-10 14:08 EDT
我实际上亲自研究过这个。我记得我向 MySQL 抱怨添加或删除索引时添加索引有多慢,并建议他们如何修复它。那是在 2006 年 10 月。
然后,突然间,在 2011 年 5 月 12 日突然有人问了同样的问题。发布问题的人 ( JIStone ) 甚至将我的原始帖子引用到 MySQL。直到大约 7 分钟后,我才意识到我实际上是在写我自己 5 年前的帖子。
归档时间: |
|
查看次数: |
4477 次 |
最近记录: |