2017-10-06 2 views
0

私は100K以上のレコードを持つテーブルを持っていますが、このテーブルは主キーが4つのカラムで構成されています。今私はプライマリキーを削除したいが、プライマリキーの定義のためにデフォルトで作成されたインデックスを保持して、そのような大きな値のデータに対してインデックスの再作成を避ける必要があります。プライマリキー制約を削除する方法インデックスを保持する方法

私はMariaDB 5.5.xバージョンを使用しています。

+0

主キーを削除する前に、キー列にインデックスを作成してから主キーを削除してください。 PKを削除して新しい索引を作成するよりも時間がかかりません。 –

答えて

1

プライマリキーを削除すると、単純なインデックス部分だけを保持することはできません。

テーブルがinnodbの場合は、最初にプライマリキーを削除してからインデックスを作成することをお勧めします。すべてsecondary indexes contain the primary keyです。したがって、セカンダリインデックスを作成してからpkをドロップすると、mariadbもセカンダリインデックスを変更する必要があります。

別のpkを作成する場合は、まずそれを作成し、同じ理由で2次インデックスを作成します。

1

InnoDBでは、PK(PRIMARY KEY)を変更すると常にテーブル全体が再構築されます。期間。

すべてに変更があります。ALTER TABLE。ここで何が起こるのですか(なぜこれが最も良いのか分かります)

  1. テーブルをロックする(書き込みをブロックするために)。
  2. 元のスキーマと同じスキーマで新しい(空の)テーブルを作成します。
  3. 新しいテーブルをに変更します。は、ALTER TABLEで示される方法を変更します。
  4. すべてのデータを新しいテーブルにコピーします。 PKがに変更されていることに注意してください。これには、データの並べ替えが含まれる場合があります。
  5. セカンダリインデックスを再構築します。 (これがステップ3の一部として実行されるか、別のパスとして実行されるかはわかりません)
  6. RENAME古いテーブルの代わりに新しいテーブルを移動します。 (これは素早く高速です)
  7. ロックを解除してください。

ALTERsを2つ作成してPKに2つの変更を加えた場合は、すべての手順を2回実行します。

すべての2次キーには、PK列のコピーが含まれています。したがって、PK への変更には、の再構築すべての二次キーが必要です。

InnoDBでは、が間違っています。には、PKなしのテーブルがあります。 (隠されたシリアル番号が提供されますが、これによりメンテナンスや複製などがより苦痛になります)

InnoDB以外のエンジンについて話しているのなら、そうしないでください。 InnoDBのみを使用してください。 (私が言ったことの多くはMyISAMには当てはまりません)

関連する問題