我正在优化一些代码,并提出了如下查询:
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连接。
在这种情况下你是正确的。但有三个原因:
- 没有引用
dtable
的列。 - 连接是
LEFT JOIN
s,所以它们不做任何过滤。 - 聚合函数为
MAX()
,因此重复对结果没有影响。