继续,我有一个表代表一个父母身份的关系:
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)
我的问题是:
与第二个查询相比,第一个查询具有较高的IO成本和较低的CPU成本。与第一个查询相比,第二个查询具有较低的IO和更多的CPU。
我建议使用第二个查询,因为IO对性能的影响比对CPU的影响更大。如果您可以减少查询的IO并增加CPU成本,则最好减少CPU成本并增加IO成本。