19 列と約 4 億行の Composite-List-List パーティション テーブルがあります。週に 1 回、新しいデータがこのテーブルに挿入されます。挿入の前に、特定のパーティションに対して 2 つの列の値を null に設定する必要があります。
明白なアプローチは、COLUMN_1 がパーティション基準である次のようなものです。
UPDATE BLABLA_TABLE
SET COLUMN_18 = NULL, SET COLUMN_19 = NULL
WHERE COLUMN_1 IN (VALUE1, VALUE2…)
もちろん、これは非常に遅くなります。
2 番目に考えたのは、これら 2 つの列を null に設定する必要があるすべてのパーティションに CTAS を使用し、次に EXCHANGE PARTITION を使用して大きなテーブルのデータを更新することでした。残念ながら、これは複合パーティションであるため機能しません。
サブパーティションで同じアプローチを使用することもできますが、CATS を約 8000 回使用し、その後毎週それらのテーブルを削除する必要があります。それは今後のコードレビューに合格しないと思います。
誰かがこれを効率的に解決する別のアイデアを持っているかもしれませんか?
PS: データベースとして ORACLE 11g を使用しています。PPS: 下手な英語でごめんなさい…..