DB2 - IN与JOINS

时间:2014-10-29 15:01:09

标签: sql db2

我找到了一些关于IN,JOINS和EXISTS的信息,并且有效率。但对我来说,我的问题从未得到真正回答,或者答案没有明确说明。 我的例子产生了相同的结果。

以下是两个例子:

SELECT  COUNT(DISTINCT A.ID)
  FROM  A
       ,B
       ,C
 WHERE A.ID = B.ID
   AND B.ID = C.ID 
   AND 'SOME OTHER CONDITIONS';

SELECT COUNT(DISTINCT A.ID)
  FROM A
 WHERE A.ID IN (SELECT DISTINCT B.ID
                  FROM B
                      ,C
                 WHERE B.ID = C.ID
                   AND 'SOME CONDITION')
   AND 'SOME CONDITION';

对抗数亿行,其中一行明显​​比另一行明显得多吗?

2 个答案:

答案 0 :(得分:0)

我认为这取决于你从内部选择“消除”了多少行。如果内部选择返回几行,则执行“IN”将更快。但是我不认为会有太大的区别,也许第一个例子可能会使用更多的内存,因为它需要在内存中存储三个表的整个笛卡尔积。

未经请求的提示:写下这样的连接条件:FROM B JOIN C ON (B.ID = C.ID),它会更清楚,并且在WHERE子句中,您将只有必要的条件。这不会影响性能,只是一个建议

答案 1 :(得分:0)

我在SQL中尝试了100000条记录和一个非常类似的查询,没有条件,看到了执行计划。两者的输出结果相同。 两者的查询成本均为50%。 同样有统计数据,1st在table2上有3891个物理读取,在table1上有425个,而另一个在table2上有4593个物理读取,在table1上有79个。两个查询的逻辑读取和预读读取几乎相似。 很明显,两个查询都以相同的方式工作。

我的查询

Select count( distinct table1.column)
From table1 join table2
on table1.column= table2.column;

Select count (distinct column)
From table1
Where column in 
         (Select distinct column
          from table2);

但是,当我使用Select column而不是count(distinct column)即没有聚合时,加入的查询成本为5%,而另一个的查询成本为95%,所有读取的次数都少了很多倍联接。

因此,对于非汇总查询'加入'效率高于' In'。

相关问题