次の 2 つのテーブルを想定します。
TRANSACTION
Primary Key: REF_NO
Columns: REF_NO, TXN_DATE, ITEM_CODE, QUANTITY
ITEM
Primary Key: ITEM_CODE
Columns: ITEM_CODE, ITEM_DESC
クエリ (1):
SELECT T.REF_NO, T.TXN_DATE, T.ITEM_CODE,
I.ITEM_DESC,
T.QUANTITY
FROM TRANSACTION T, ITEM I
WHERE T.ITEM_CODE = I.ITEM_CODE
クエリ (2):
SELECT T.REF_NO, T.TXN_DATE, T.ITEM_CODE,
(SELECT ITEM_DESC FROM ITEM WHERE ITEM_CODE = T.ITEM_CODE) AS ITEM_DESC,
T.QUANTITY
FROM TRANSACTION T
インデックス (インデックス) は、必要に応じて両方のテーブルにあります。
上記は私がやっていることの非常に単純化されたバージョンですが、コンセプトは同じです。
(1)の方がインデックスのおかげで効率的だと言われましたが、Explain Planは実際にそれを示唆しています。(1) の説明計画は、両方のテーブルへのインデックス アクセスを示しています。(2) の Explain Plan は、ITEM でのインデックス アクセスを示していますが、TRANSACTION でのフル テーブル アクセスを示しています。
しかし、私のジレンマは、実際のパフォーマンスの時間を測定するために非常に大きなデータセットでそれらを実行するときです。(2) は(1) よりも4 倍高速です! これにはどのような理由が考えられますか? (2) ではなく (1) を選択する必要があるのはなぜですか? ( (1) よりも (2) を選ぶことにした。 )