【问题标题】:How to speed up adding a primary key in a MySQL table如何加快在 MySQL 表中添加主键
【发布时间】:2017-09-01 17:48:15
【问题描述】:

现在向表添加主键需要 2 个小时才能完成。

ALTER TABLE <table-name> ADD PRIMARY KEY (a,b,c,d,e);

a: VARCHAR(50) NOT NULL COLLATE 'utf8_general_ci',
b: SMALLINT UNSIGNED,
c: YEAR SMALLINT(4) NOT NULL,
d: INT UNSIGNED NOT NULL DEFAULT '0',
e: INT UNSIGNED NOT NULL,

此特定表中每列的排列数如下:

a:12 个排列 b:83个排列 c:6个排列 d:200 个排列 e: 200 个排列

现在我计划将 a 列从 VARCHAR(50) 更改为 INT。我想知道是否有任何其他技巧可以加快查询速度?谢谢。

更多信息:

MySQL 5.6
50 million rows
Using InnoDB
Didn't tune any Innodb settings. All default Amazon AWS Aurora settings. 
SSD

There is another index on 
    d: INT UNSIGNED NOT NULL DEFAULT '0',
    e: INT UNSIGNED NOT NULL,

Two other indexes on other columns f & g, which are not included in the primary key.  Thanks.

【问题讨论】:

  • 旋转磁盘还是 SSD?多少行?还有多少其他指标?您是否调整过您的 InnoDB 引擎,或者您是否正在使用 InnoDB?这里的变量太多了。
  • 嗨@tadman;谢谢。只需在编辑后的帖子中回答您的问题。谢谢。
  • 存储组件在这里非常重要。 HDD 将比 SSD 慢几个数量级。我刚刚进行了这样的迁移,在普通 HDD 上需要一周时间,但在 SSD 上只需要六个小时。
  • 感谢@tadman。只需确认查询是在 SSD 上运行的。

标签: mysql indexing query-optimization primary-key


【解决方案1】:

在 InnoDB 中添加主键需要复制整个表并重建二级索引。没有办法避免这种情况。

Aurora 对二级索引的写入性能较差。因此,您可以尝试在添加主键之前暂时删除二级索引。

Amazon Aurora 已经改变了 InnoDB 的很多内部结构,并且他们没有发布精确调整选择所需的信息。 Aurora 使用专有存储技术,没有太多可用于调整的信息。因此,您可以尝试联系亚马逊寻求咨询帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2012-11-25
    • 2018-07-19
    • 2023-01-05
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多