2017-09-01 5 views
0

今すぐプライマリキーをテーブルに追加すると、2時間で完了します。MySQLテーブルでプライマリキーを追加する速度を上げる方法

:下記として

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, 

この特定のテーブル内の各列の順列の数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. 
+0

スピニーディスクまたはSSD?何行ですか?いくつの他の身分証明書? InnoDBエンジンをチューニングしましたか、InnoDBを使用していますか?あまりにも多くの変数があります。こんにちは@tadman; – tadman

+0

ありがとう。編集した投稿の質問に答えてください。ありがとうございました。 – Chubaka

+0

ここではストレージコンポーネントが非常に重要です。 HDDはSSDよりも数桁遅いでしょう。私はちょうど通常のHDDで1週間かかるだろうが、SSDでわずか6時間かかったこのような移行を行った。感謝@タドマン。 – tadman

答えて

1

InnoDB内の主キーを追加するには、テーブル全体をコピーしてセカンダリインデックスを再構築する必要があります。それを避ける方法はありません。

オーロラは、2次インデックスの書き込みパフォーマンスが劣ります。したがって、プライマリキーを追加する前にセカンダリインデックスを一時的に削除することができます。

Amazon AuroraはInnoDBの多くの内部構造を変更し、正確なチューニングの選択に必要な情報を公開していません。 Auroraは独自のストレージ技術を使用しており、これをチューニングするための情報はあまりありません。 Amazonで、コンサルティングの手助けをしてみることもできます。

関連する問題