将列添加到MySql UNIQUE KEY的最有效方法?

时间:2018-01-10 04:09:29

标签: mysql sql

我正在使用>表格上的生产数据库200万行,以及col_a上的UNIQUE KEY,col_b。

我需要修改该索引,使其超过col_a,col_b和col_c。

我认为这是一个有效的原子命令来进行更改:

ALTER TABLE myTable
  DROP INDEX `unique_cols`,
  ADD UNIQUE KEY `unique_cols` (
    `col_a`,
    `col_b`,
    `col_c`
  );

这是最有效的方法吗?

1 个答案:

答案 0 :(得分:2)

我不确定以下方式是否适合您。在我们自己遇到一些数据库问题并且必须快速修复它们之后,这对我们有用。

我们处理非常大的表格, 4-5GB大小

这些表格> 200万行

根据我们在运行任何形式的alter query时的经验/如果正在写表,表上的索引创建是危险的。

  1. 所以在我们的例子中,如果表格有24/7写入,我们会这样做:

    • 使用正确的索引创建一个新的空表。

    • 使用Percona等工具或手动编写脚本,逐行将数据复制到新表中。

  2. 这允许表使用更少的内存,并且还可以在您拥有MyISAM表时保存。

    1. 如果您有一个非常大的表没有定期写入,您可以在不使用时创建索引。

      • 这很难预测,如果您没有正确估算,可能会导致问题。
    2. 在任何一种情况下,您的目标应该是:

      • Save memory / load on the system.

      • Reduce locks on the tables

      当我们为超大型表添加/删除列时,上述情况也适用,因此我们不仅可以创建索引,还可以添加和减去列。

      希望这会有所帮助,任何人都可以自由地反对/添加我的答案。

      一些更有帮助的答案:

              

      https://dba.stackexchange.com/a/54214