私はそうのような結合を実行するために、それは(常に)であればjoin
はので、私は思っていたwhere
前に実行されるように、良いアイデアを読み:代わりに通常のエイリアステーブルに関連する行を最初に選択すると、高速に結合できますか?
SELECT * FROM tbl_1 t1 JOIN tbl_2 t2 USING (joinable_field)
WHERE t1.field = 'the_value'
私はそうのような結合を実行するために、それは(常に)であればjoin
はので、私は思っていたwhere
前に実行されるように、良いアイデアを読み:代わりに通常のエイリアステーブルに関連する行を最初に選択すると、高速に結合できますか?
SELECT * FROM tbl_1 t1 JOIN tbl_2 t2 USING (joinable_field)
WHERE t1.field = 'the_value'
これで、実行順序と評価順序が制限されます。 t
を最初に作成する必要があります(おそらく、オンザフライで、おそらく物理的にはディスク上に)、tbl_2
が参加している必要があります。
具体的なケースでは、これは傷ついてはいけません。しかし、私は利益も見られません。
の
SELECT * FROM
(SELECT * FROM tbl_1 WHERE field = 'the_value') t
JOIN tbl_2 USING (joinable_field)
をあなたはどこを読んだのですか? WHERE
の前にJOIN
は実行されません。結果はのように返され、のように、JoinはWhereの前に実行されます。問合せオプティマイザは、最適な実行パスを自由に選択できます。
アドバイスには、非常に複雑なクエリや非常に良いオプティマイザではない価値があります。