小编典典

UNION与CROSS APPLY的表现

sql

继续,我有一个表代表一个父母身份的关系:

PARENT | CHILD
   1   |   2
   1   |   3
   2   |   4

两个字段都是代表一个人的数字。

我需要将此表的不同人员作为一组,而不是将其作为孩子还是父母来导入。我首先想到的查询是最明显的查询:

 SELECT DISTINCT PARENT FROM TABLE1
 UNION SELECT DISTINCT CHILD FROM TABLE1

但是一个波纹管似乎表现更好(至少在我的真实数据中):

 SELECT DISTINCT CASE WHEN N.n=1 THEN parent ELSE child END 
 FROM TABLE1
 CROSS APPLY(SELECT 1 UNION SELECT 2)N(n)

我的问题是:

  • 第二个查询真的比我一直建立的第一个查询快吗?
  • 只是出于好奇,有没有更快的方法呢?

阅读 167

收藏
2021-04-28

共1个答案

小编典典

与第二个查询相比,第一个查询具有较高的IO成本和较低的CPU成本。与第一个查询相比,第二个查询具有较低的IO和更多的CPU。

我建议使用第二个查询,因为IO对性能的影响比对CPU的影响更大。如果您可以减少查询的IO并增加CPU成本,则最好减少CPU成本并增加IO成本。

2021-04-28