我正在优化一些代码,并提出如下查询:
SELECT
t.ID
MAX(CASE WHEN t.line=1 THEN zt.title ELSE NULL END) as primary_title
MAX(CASE WHEN t.line=2 THEN zt.title ELSE NULL END) as sec_title
MAX(CASE WHEN t.line=3 THEN zt.title ELSE NULL END) as tert_title
MAX(CASE WHEN t.line=4 THEN zt.title ELSE NULL END) as quat_title
FROM table t
LEFT JOIN btable b on b.id=t.id
LEFT JOIN ztable zt on zt.id = b.id
LEFT JOIN dtable d on d.id = b.id -- Is not used, yet in execution plan, table is fully accessed and scanned, causing query to run much slower.
WHERE t.line in(1,2,3,4)
GROUP by t.id
如果我删除了最后一个连接,我没有以任何正确的方式影响结果,因为没有使用dtable中的列?
我正在做一些测试,并且在有或没有连接的情况下结果集中没有发现任何差异,但只是想问专家。
谢谢!
更新:在dtable连接上修复类型。
答案 0 :(得分:1)
在这种情况下,你是对的。但有三个原因:
dtable
中的列。LEFT JOIN
s,因此他们没有进行任何过滤。MAX()
,因此重复项对结果没有影响。