Oracle-Datenbank wird verwendet Es gibt SALES-Tabelle und eine Vielzahl von Dictionary-Tabellen DICT_1, DICT_2, ... DIC_N. Benutzer können SALES Tabellen (insert Update löschen) ändern und Ergebnisdaten stellen wie:Verbessern Sie die Leistung in SQL-Abfrage mit vielen RIGHT OUTER JOIN und ORDERING
SELECT
S.ID as ID,
RPAD(D1.NAME, 10) || LPAD(D1.NAME, 10) as NAME,
CASE
WHEN D2.count > 0 THEN 'Y'
ELSE 'N'
END
as FLAG
D3.FIELD as SOME_FIELD_3
D4.FIELD as SOME_FIELD_4
D5.FIELD as SOME_FIELD_5
FROM SALES S, DICT_1 D1, DICT_2 D2, DICT_3 D3, DICT_4 D4, DICT_5 D5
WHERE
S.D1_ID = D1.ID(+)
AND S.D2_ID = D2.ID(+)
AND S.D3_ID = D3.ID(+)
AND S.D4_ID = D4.ID(+)
AND S.D5_ID = D5.ID(+)
ORDER BY NAME;
So versuchen Wörterbuch zu verbinden, falls kein sutch Wörterbuch null auf den Verkauf und zusätzliches Feld von Wörterbuch Feldern und SALES zu berechnen. Oredering kann auf jedes Feld von select applated (zum Beispiel NAME, FLAG, ...). Withot Abfrage ist ziemlich schnell, aber mit Bestellleistung sinkt. Ich schlage vor, ORACLE MATERIALIZED VIEW zu verwenden, aber weil Benutzer häufig die SALES-Tabelle aktualisieren, lehnen diese Vorgehensweise ab. Könnten Sie bitte mit der Entscheidung unterstützen, wie Sie diese Abfrage mit rechter äußerer Verknüpfung verbessern und die Reihenfolge durch das berechnete Feld verbessern können.
Ist das eine Art uraltes Recht Join Syntax oder? – Magnus
Wechseln Sie zuerst zur modernen, expliziten Joinsyntax. Außerdem haben die meisten Leute genug Probleme mit LEFT JOIN und finden RIGHT JOIN noch verwirrender. Also, tut jedem einen Gefallen und wechselt zu LINKER JOIN! – jarlh
Leider kann die Syntax die Leistung nicht beeinflussen – Alstresh