MyTable
日付を持つ複数の int 列と日付を含む 1 つの列を持つテーブルがあります。日付列には、次のように作成されたインデックスがあります
CREATE INDEX some_index_name ON MyTable(my_date_column)
これは、ユーザーが指定した日付範囲の間でテーブルの内容がクエリされることが多いためです。テーブルには、それを指す外部キーはなく、シーケンス/トリガーによって埋められた自動インクリメント インデックスである主キー以外のインデックスもありません。
さて、私が抱えている問題は、このテーブルのデータが古くなったために、特定の期間、頻繁に置き換えられることです。したがって、更新される方法は、特定の期間内のすべてのエントリを削除し、新しいエントリを挿入することです。削除は次を使用して実行されます
DELETE FROM MyTable
WHERE my_date_column >= initialDate
AND my_date_column < endDate
ただし、削除される行の数が非常に多いため (500 万行から 1200 万行)、プログラムは削除中にほとんどブロックされます。
操作を高速化するために無効にできるものはありますか? または、インデックスにオプションを指定して高速化することもできますか? これに関係するやり直し領域について何か読んだことがありますが、操作中にそれを無効にする方法がわかりません。
編集: プロセスは毎日実行され、過去 5 日間のデータが削除されます。次に、その 5 日間のデータ (外部ソースで変更されている可能性があります) が取り込まれ、データが再挿入されます。
削除されたデータの量は、テーブル内のデータ全体の量に比べてごくわずかです (< 1%)。したがって、保持したいデータを別のテーブルにコピーし、テーブルを削除して再作成することは、最善の解決策ではない可能性があります。