Oracleでは、どの句タイプが最初に評価されますか? 次のようにすると (ふり .... 有効な式と関係名を表す)、評価の順序はどうなりますか?
SELECT ...
FROM .....
WHERE ........
GROUP BY ...........
HAVING .............
ORDER BY ................
SELECT 句が最後に評価されるという印象を受けますが、それ以外はわかりません。
Oracleでは、どの句タイプが最初に評価されますか? 次のようにすると (ふり .... 有効な式と関係名を表す)、評価の順序はどうなりますか?
SELECT ...
FROM .....
WHERE ........
GROUP BY ...........
HAVING .............
ORDER BY ................
SELECT 句が最後に評価されるという印象を受けますが、それ以外はわかりません。
ORDER BYは選択リストで定義されたエイリアスを使用できるため、選択リストを常に最後に評価できるとは限りません。そのため、後で実行する必要があります。例えば:
SELECT foo+bar foobar FROM table1 ORDER BY foobar
一般的に、実行の順序は次のようになります。
GROUP BY句とWHERE句は、HAVINGとORDER BYのように、結果を変更せずに入れ替えることができます。
実際には、データベースはさまざまな実行プランに従って実行を並べ替えることができるため、状況はより複雑になります。結果が同じである限り、実行される順序は関係ありません。
また、ORDER BY句にインデックスが選択されている場合、行はディスクから読み取られたときにすでに正しい順序になっている可能性があることにも注意してください。この場合、ORDERBY句は実際にはまったく実行されません。
それが実行計画の目的です。しかし、一般的に、それを行う方法は 1 つしかありません。当面は最適化を無視します。
最適化により、より良い決定を下すための「ピーク」が発生する可能性があります (たとえば、テーブルをスキャンする前に WHERE 句を確認することをお勧めします。インデックスが利用できる場合があります)。
ほとんどの RDBMS は、基本的にクエリを書き直してインデックスを利用したり、冗長な式を削除したりするオプティマイザーを事前に通過させることでこれを解決すると考えています。この最適化されたクエリは、実行計画を実際に構築するために使用されます。詳細を変更する可能性のある並列処理もありますが、基本は同じです。