如何加快在MySQL表中添加主键的速度

时间:2017-09-01 17:48:16

标签: mysql indexing query-optimization primary-key

现在向表中添加主键需要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.

1 个答案:

答案 0 :(得分:1)

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

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

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