添加索引非常慢...是否有 mysql cmd 来获取 ETA 或显示进度?

Ata*_*ire 15 mysql

我目前正在我的表(20M 条目)上运行一个更改查询以添加索引。它已经运行了 3 天以上(卡在“复制到 tmp 表”上)。

有没有办法可以看到查询的进度,或者换句话说,有没有办法获得估计的完成时间?

谢谢。

小智 4

当 mysql 更改表时,它本质上会创建该表的副本,然后将副本交换进来。这样,如果您在中间取消更新,该表仍处于稳定状态。因此,您可以查看 mysql 数据目录(/var/lib/mysql/?)以查看新文件有多大,这将告诉您它的长度。这对于 Innodb 来说有点困难,但是在某处创建了一个 tmp 表。

您可以通过增加排序缓冲区变量(myisam_sort_buffer_size、sort_buffer_size)来显着减少索引所花费的时间。根据你的记忆力,让它们尽可能大。您可以将修改时间缩短几天,甚至可以缩短到几个小时,具体取决于您拥有多少内存。我用了大约3小时完成了一个150M的记录表。