我需要加入3个表a,b,c,我知道最左边的表中只有一行必须出现在最终结果中。
SELECT *
FROM a
LEFT JOIN b
ON a.id = b.id
LEFT JOIN c
ON c.id2 = b.id2
WHERE a.id = 12;
我提出了以下查询,因为它似乎更有效,但两个查询都需要相同的时间来执行。这是因为第一个查询是优化的吗?我是否应该费心选择更高效(第二)的查询或坚持第一个查询,因为它更具可读性?
SELECT *
FROM (SELECT * FROM a WHERE id=12) AS temp
LEFT JOIN b
ON temp.id = b.id
LEFT JOIN c
ON b.id2 = c.id2;
答案 0 :(得分:1)
与优化查询一样,答案应该是:它取决于。 答案取决于几个方面,其中包括:
因此,唯一可以确定您是否应该使用查询1或查询2的人是:您。你不可能就这个话题给出合理的建议。
答案 1 :(得分:-1)
是的,最好在JOINING之前选择。
假设:
表A中的1000000记录,表B中的20000记录和表C中的500000记录
首次提问
1:读取表100中的1000000记录表格-------------------------- 1000000 I / O
2:写入1000000结果+从B读取20000 --------------- 2020000 I / O
3:写入2020000结果+从C读取500000 ------------- 4540000 I / O
4:过滤结果4540000 +写入输出1 --------------------- 9080001 I / O [总计]
<小时/>
第二次查询
1:读取表100中的1000000记录表格-------------------------- 1000000 I / O
2:过滤结果1000000 +写1 ------------------------------ 1000001 I / O
3:写入1结果+从B读取20000 ------------------------ 1020001 I / O
4:写1个结果+从C读取500000 ---------------------- 1520001 I / O
5:写输出结果1 ----------------------------------------- - 1520002 I / O [总计]