1

次の 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) を選ぶことにした。 )

4

1 に答える 1