Oracleデータベースが使用されています SALESテーブルと多くのディクショナリテーブルDICT_1、DICT_2、... DIC_Nがあります。 ユーザーは、SALESテーブルを変更(挿入、更新、削除)などのデータ結果と尋ねることができます:多くのRIGHT OUTER JOINとORDERINGを使用してSQLクエリのパフォーマンスを向上させます
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;
だから何sutch辞書はnullを設定していない場合には特売の辞書に参加しようと辞書フィールド・販売から追加フィールドを計算します。選択(たとえば、名前、フラグ、...)から任意のフィールドに服用することができます。クエリによるウィット順序は非常に高速ですが、順序付けのパフォーマンスは低下します。 私はORACLE MATERIALIZED VIEWを使用することを提案しますが、ユーザーはしばしばSALESテーブルを更新してこのaproachを拒否します。 右外部結合と計算結果フィールドを使用してこのクエリを改善する方法を決定してサポートしてください。
これは、古典的な右結合構文ですか? – Magnus
まず、現代的な明示的な結合構文に切り替えます。また、ほとんどの人はLEFT JOINに十分な問題を抱えており、正しいジョインがさらに混乱していることがわかります。だから、みんなに好意を持ち、LEFT JOINに切り替えてください! – jarlh
残念ながら構文はパフォーマンスに影響しません – Alstresh