如果没有使用join表的任何部分,可以删除它吗?



我正在优化一些代码,并提出了如下查询:

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连接。

在这种情况下你是正确的。但有三个原因:

  1. 没有引用dtable的列。
  2. 连接是LEFT JOIN s,所以它们不做任何过滤。
  3. 聚合函数为MAX(),因此重复对结果没有影响。

相关内容

  • 没有找到相关文章

最新更新