INSERTが1つだけ(多分数百件)のSELECTステートメントが多すぎます。システムのパフォーマンスが低下しています。INSERT-SELECT(Oracle PL/SQL) - パフォーマンスの問題
私は何が起こっているのか、私が探してるものを一般的な言葉で説明します:
は、Oracle PL/SQLで次の二つの擬似コードを考慮すると、最高のパフォーマンスを与えるそれらのどれ?
オプションA:
INSERT INTO MyTable
WITH Fields AS (
SELECT Field1, Field2, ..., FieldN FROM TableA JOIN TableW .... WHERE <condition1>
UNION ALL
SELECT Field1, Field2, ..., FieldN FROM TableB JOIN TableX .... WHERE <condition2>
UNION ALL
SELECT Field1, Field2, ..., FieldN FROM TableC JOIN TableB .... WHERE <condition3>
....
UNION ALL
....
SELECT Field1, Field2, ..., FieldN FROM TableZZZ JOIN TableB .... WHERE <conditionN>
オプションB:
BEGIN
INSERT INTO MyTable SELECT Field1, Field2, ..., FieldN FROM TableA JOIN TableZ .... WHERE <condition1>
INSERT INTO MyTable SELECT Field1, Field2, ..., FieldN FROM TableB JOIN TableW .... WHERE <condition2>
INSERT INTO MyTable SELECT Field1, Field2, ..., FieldN FROM TableC JOIN TableH .... WHERE <condition3>
...
INSERT INTO MyTable SELECT Field1, Field2, ..., FieldN FROM TableZZZZ JOIN TableX .... WHERE <conditionN>
END
私は、実際のテーブル名を入れていないが、私は知っているしたいと思います:私はオプションに現在のオプションAを変更した場合B、それは私に良いパフォーマンスを提示するだろうか?つまり、この場合、UNION ALLを多くのINSERT文で置き換えるのは良い考えですか?
なぜ「WHERE OR OR ...? –
@PeterLang、は大きく、これらのSELECT文は頻繁に変更されます(私は擬似コードを更新します) –
これはあなたの質問に答えませんが、再設計がオプションである場合、 'TableA'、' TableB'、 TableCは本当に別のテーブルである必要があります。タイプを記述する1つのカラムを持つ1つのテーブルがあれば、あなたの現在の要件(および他の多くのもの)はもっと簡単に解決できます。 –