首先通过在别名表中选择相关行来加快连接速度?

时间:2012-02-23 10:36:07

标签: mysql

我读到在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'

2 个答案:

答案 0 :(得分:1)

你在哪里读到的? JOIN之前未执行WHERE。结果应该返回,好像在Where之前执行加入。查询优化器可以自由选择任何最佳执行路径。

对于非常复杂的查询和/或不是非常好的优化器,建议可能有一些价值。

答案 1 :(得分:1)

有了这个,您就限制了执行和评估顺序。必须首先创建t(可能是“即时”,可能是在磁盘上的物理上),并且tbl_2已加入。

在具体情况下,这不应该受到伤害。但我也看不到任何好处。