是否有一个可以在ALTER TABLE查询前工作的EXPLAIN?

时间:2014-07-08 18:42:17

标签: mysql sql performance indexing

看起来MySQL EXPLAIN前缀仅适用于某些查询。 在ALTER TABLE查询前是否有相当于EXPLAIN的东西?

我希望能够找出我的计划ALTER TABLE语句可能需要多长时间。

背景:我有一个来自其他人的表,其中包含300列数据。我知道我只需要使用其中的一些列,并且为了找出我需要的列,我计划对几个关键词进行全文搜索。但为了做到这一点,我需要添加一个全文索引。由于我对这一大小的数据集感到陌生,我不完全确定这是一个现实的计划。我希望像EXPLAIN这样的东西(或者更可能是这个线程中的替代工具)可能有助于确定这一点。


编辑:在回答下面的几个问题时,我应该提到这个表有大约400万行并且在本地测试机器上。所以我可以在需要时盲目地运行这个东西。如果可能的话,我只是不喜欢。感谢到目前为止所有的好消息。

1 个答案:

答案 0 :(得分:0)

大多数"更改表"将触发复制到tmp表操作,它将创建具有新架构的临时表,然后锁定表,将数据从旧表复制到新表,然后重命名,删除旧表。

所以消耗的大部分时间都是复制到临时表,如果服务器有足够的内存,它取决于该表的大小。使用show table status来检查表的大小(data_length + index_length),在其他表上的示例以了解mysql服务器上的传输速度,然后就可以估计需要多长时间。

在mysql doc上提到的关于DML解释的另一种方法,但我没有得到结果,可能还没有完成:

http://dev.mysql.com/doc/refman/5.6/en/explain.html

从MySQL 5.6.3开始,EXPLAIN允许的可解释语句是SELECT,DELETE,INSERT,REPLACE和UPDATE。在MySQL 5.6.3之前,SELECT是唯一可解释的语句。