3

特定のテーブルで使用されているパーティションがクエリのパフォーマンスを低下させていることがわかり、テーブルからパーティションを削除したいと考えています。これを行う簡単な方法はありますか?問題のテーブルには 64 個のパーティションがあります。いくつかの初期調査に基づいて、次のオプションを考え出しました。より良い方法はありますか?

  1. データを別のテーブルにコピーし、すべてのパーティションを削除してから、データを元のテーブルにコピーして戻します
  2. データを別のテーブルにコピーし、元のテーブルを削除してから、新しいテーブルの名前を変更してインデックスを再構築します
  3. MERGE PARTITION を使用して、すべてのパーティションを単一のパーティションにマージします

考え?

4

1 に答える 1

4

個人的には、オプション 2 のバリアントが最良のアプローチのように思えます。

  1. select * from old table として新しいテーブルを作成
  2. 新しいテーブルにインデックスを作成(*)
  3. 古いテーブルの名前を別のものに変更する
  4. 新しいテーブルの名前を古いテーブル名に変更
  5. 外部キー制約を古いテーブルから新しいテーブルに切り替えます。また、助成金、同義語なども転送します。
  6. 遅い時間で古いテーブルを削除

(*) パーティション化されていないテーブルには、パーティション化されたテーブルとは異なるインデックスが必要になる可能性があります。インデックス名に特にこだわりがある場合はALTER INDEX ... RENAME TO ...、手順 6 の後に構文を使用できます。

このアプローチの利点は、ダウンタイムを最小限に抑えることです (基本的には手順 3、4、および 5)。

于 2009-12-02T15:50:02.980 に答える