我读到在join
之前执行了where
所以我想知道是否(总是)执行这样的连接是个好主意:
SELECT * FROM
(SELECT * FROM tbl_1 WHERE field = 'the_value') t
JOIN tbl_2 USING (joinable_field)
而不是通常的
SELECT * FROM tbl_1 t1 JOIN tbl_2 t2 USING (joinable_field)
WHERE t1.field = 'the_value'
答案 0 :(得分:1)
你在哪里读到的? JOIN
之前未执行WHERE
。结果应该返回,好像在Where之前执行加入。查询优化器可以自由选择任何最佳执行路径。
对于非常复杂的查询和/或不是非常好的优化器,建议可能有一些价值。
答案 1 :(得分:1)
有了这个,您就限制了执行和评估顺序。必须首先创建t
(可能是“即时”,可能是在磁盘上的物理上),并且tbl_2
已加入。
在具体情况下,这不应该受到伤害。但我也看不到任何好处。