私は100K以上のレコードを持つテーブルを持っていますが、このテーブルは主キーが4つのカラムで構成されています。今私はプライマリキーを削除したいが、プライマリキーの定義のためにデフォルトで作成されたインデックスを保持して、そのような大きな値のデータに対してインデックスの再作成を避ける必要があります。プライマリキー制約を削除する方法インデックスを保持する方法
私はMariaDB 5.5.xバージョンを使用しています。
私は100K以上のレコードを持つテーブルを持っていますが、このテーブルは主キーが4つのカラムで構成されています。今私はプライマリキーを削除したいが、プライマリキーの定義のためにデフォルトで作成されたインデックスを保持して、そのような大きな値のデータに対してインデックスの再作成を避ける必要があります。プライマリキー制約を削除する方法インデックスを保持する方法
私はMariaDB 5.5.xバージョンを使用しています。
プライマリキーを削除すると、単純なインデックス部分だけを保持することはできません。
テーブルがinnodbの場合は、最初にプライマリキーを削除してからインデックスを作成することをお勧めします。すべてsecondary indexes contain the primary keyです。したがって、セカンダリインデックスを作成してからpkをドロップすると、mariadbもセカンダリインデックスを変更する必要があります。
別のpkを作成する場合は、まずそれを作成し、同じ理由で2次インデックスを作成します。
InnoDBでは、PK(PRIMARY KEY
)を変更すると常にテーブル全体が再構築されます。期間。
すべてに変更があります。ALTER TABLE
。ここで何が起こるのですか(なぜこれが最も良いのか分かります)
ALTER TABLE
で示される方法を変更します。RENAME
古いテーブルの代わりに新しいテーブルを移動します。 (これは素早く高速です)ALTERs
を2つ作成してPKに2つの変更を加えた場合は、すべての手順を2回実行します。
すべての2次キーには、PK列のコピーが含まれています。したがって、PK への変更には、の再構築すべての二次キーが必要です。
InnoDBでは、が間違っています。には、PKなしのテーブルがあります。 (隠されたシリアル番号が提供されますが、これによりメンテナンスや複製などがより苦痛になります)
InnoDB以外のエンジンについて話しているのなら、そうしないでください。 InnoDBのみを使用してください。 (私が言ったことの多くはMyISAMには当てはまりません)
主キーを削除する前に、キー列にインデックスを作成してから主キーを削除してください。 PKを削除して新しい索引を作成するよりも時間がかかりません。 –