1

次のクエリのうち、より効率的なものはどれですか?またその理由は? 実行計画によると、どちらも総コストは同じですが、それだけで全体的なパフォーマンスの良い指標になるかどうかはわかりません。

1>

SELECT MIN(ROWID), MAX(ROWID)
FROM tab_a
WHERE status = 0
AND EXISTS (
    SELECT 'X'
    FROM tab_b
    WHERE status = 0
    AND number = assembly_number
    AND ROWID >= :min_rowid
    AND ROWID <= :max_rowid
)
;

2>

SELECT MIN(ROWID), MAX(ROWID)
FROM tab_a
WHERE status = 0
AND assembly_number IN (
    SELECT number
    FROM tab_b
    WHERE status = 0
    AND ROWID >= :min_rowid
    AND ROWID <= :max_rowid
)
;
4

1 に答える 1

0

assembly_number にインデックスが付けられている場合、次のクエリの方が適切です。

SELECT MIN(ROWID), MAX(ROWID)
FROM tab_a
WHERE status = 0
AND EXISTS (
    SELECT 'X'
    FROM tab_b
    WHERE status = 0
    AND number = assembly_number
    AND ROWID >= :min_rowid
    AND ROWID <= :max_rowid
);
于 2013-07-18T06:05:36.340 に答える