Ich habe zu viele SELECT-Anweisungen zusammen mit nur einem INSERT (vielleicht Hunderte von) Und das System gibt eine schlechte Leistung.INSERT-SELECT (Oracle PL/SQL) - Leistungsproblem
Ich werde im allgemeinen Worten erklären, was passiert und was ich suche:
Unter Berücksichtigung der folgenden zwei Pseudo-Codes in Oracle PL/SQL, die von ihnen würde die beste Leistung geben?
Option 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>
Option 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
ich nicht die wirklichen Tabellennamen gelegt hat, aber ich würde gerne wissen: wenn ich die aktuelle Option A Option ändern B, würde es mir eine bessere Leistung präsentieren? Ich meine, ist es eine gute Idee, UNION ALL in diesem Fall durch viele INSERT-Anweisungen zu ersetzen?
Warum nicht 'WO ODER ODER ...'? –
@PeterLang, ist groß und diese SELECT-Anweisungen variieren oft (ich werde den Pseudo-Code aktualisieren) –
Dies beantwortet Ihre Frage nicht, aber wenn ein Redesign eine Option ist, stellen Sie sicher, dass 'TableA',' TableB' und ' TableC' müssen wirklich separate Tabellen sein. Ihre aktuelle Anforderung (und möglicherweise viele andere) könnte viel einfacher gelöst werden, wenn es eine einzige Tabelle mit einer Spalte gibt, die den Typ beschreibt. –