Observation: Quantified Predicate with Subselect(監視レポート:副選択のある比較述部)
比較述部を使用して、副選択をコーディングしました。可能であれば、明示的な値を使用するか、アトミック値を戻す副選択を使用して、述部をコーディングし直してください。
以下の例では、許可されている残業時間の上限を超えて働いた従業員を判別するために、比較述部を使用しています。
SELECT
FIRSTNAME,
LASTNAME,
FROM
EMPLOYEE
WHERE
OVERTIME > ANY
(SELECT
OVERTIME
FROM
PROJECT)
プロジェクトにおいて合計100時間を超える残業が従業員に許可されていない場合、このステートメントを以下のように、明示的な値を使用してコーディングし直すことができます。
SELECT
FIRSTNAME,
LASTNAME,
FROM
EMPLOYEE
WHERE
OVERTIME > 100
または、ANYとSOMEを使って述部がコーディングされている場合、以下のようにMIN列関数を使用して、副選択をアトミック値まで少なくすることができます。
SELECT
FIRSTNAME,
LASTNAME,
FROM
EMPLOYEE
WHERE
OVERTIME >
(SELECT
MIN(OVERTIME)
FROM
PROJECT)
メモ:OVERTIMEに昇順の索引がある場合、副選択は1回のフェッチによる索引スキャンになります。
副選択にMAX列関数を使用して、ALLでコーディングされた比較述部にも同じ変換を適用することができます。この変換ではOVERTIMEに降順の索引がある場合に、副選択が1回のフェッチによる索引スキャンになります。