次のおもちゃのクエリがある場合
SELECT *
FROM my_tables
WHERE my_id in (
SELECT my_other_id
FROM my_other_tables
) AND some_slow_func(arg) BETWEEN 1 AND 2;
WHERE句の最初の条件は、実行時間が複雑になる2番目の条件を短絡しますか?
plpgsqlのFORLOOPの一部であるSQLに取り組んでおり、my_other_tablesに存在するすべてのレコードに対して反復を実行してから、some_slow_func()を使用してFORLOOPのスコープ内でテストできます。しかし、sqlがサポートするのか、plpgsqlが短絡をサポートするのか興味があります。
いくつかの調査:Postgresのメーリングリストを調べたところ、SQLは一般的に短絡をサポートしていないとのことでした。
http://www.postgresql.org/message-id/171423D4-9229-4D56-B06B-58D29BB50A77@yahoo.com
しかし、回答の1つは、副選択によって順序を強制できると述べています。彼が何について話しているのか正確にはわかりません。副選択とは何かは知っていますが、順序がどのように適用されるかわかりませんか?誰かが私のためにこれを明確にすることができますか?