时间:2021-07-01 10:21:17 帮助过:11人阅读
列表7:用来创建性能测试数据示例的TSQL
列表7的代码为1000个不同的客户创建了2个月的数据。这段代码为每第七个用户不插入销售记录。这段代码为Cust表插入了1000条记录,并且为Sales 表插入了52,338 条记录。
为了演示使用CROSS JOIN操作符依赖于输入数据集大小会有如何的不同,让我们运行列表8和列表9的代码,对于每一个测试我会记录下它们返回结果所需要的时间。
SELECT CONVERT(CHAR(6),S1.SaleDate,112) AS SalesMonth, C.CustName, ISNULL(SUM(S2.SalesAmt),0) AS TotalSales FROM Cust C CROSS JOIN ( SELECT SaleDate FROM Sales ) AS S1 LEFT OUTER JOIN Sales S2 ON C.ID = S2.CustID AND S1.SaleDate = S2.SaleDate GROUP BY CONVERT(CHAR(6),S1.SaleDate,112),C.CustName HAVING ISNULL(SUM(S2.SalesAmt),0) = 0 ORDER BY CONVERT(CHAR(6),S1.SaleDate,112),C.CustName
列表8:所有记录的CROSS JOIN
SELECT CONVERT(CHAR(6),S1.SaleDate,112) AS SalesMonth, C.CustName, ISNULL(SUM(S2.SalesAmt),0) AS TotalSales FROM Cust C CROSS JOIN ( SELECT DISTINCT SaleDate FROM Sales ) AS S1 LEFT OUTER JOIN Sales S2 ON C.ID = S2.CustID AND S1.SaleDate = S2.SaleDate GROUP BY CONVERT(CHAR(6),S1.SaleDate,112),C.CustName HAVING ISNULL(SUM(S2.SalesAmt),0) = 0 ORDER BY CONVERT(CHAR(6),S1.SaleDate,112),C.CustName
列表9:去重销售日期记录的CROSS JOIN
在列表8中,CROSS JOIN操作符将1000条Cust表记录和52,338条Sales表记录进行关联用来产生52,338,000行的数据集合,这些记录随后用来决定在一个月中具有0条销售记录的客户。在列表9中,我改变了查询条件,从Sales表中仅仅返回SalesDate值的去重集合。这个去重的集合仅仅产生了61条不同的SalesDate值,因此列表9的CROSS JOIN操作符仅仅产生了61,000条记录。通过减少CROSS JOIN操作符的结果集,我的列表9的查询运行了少于1秒的时间,同时
高级T-SQL进阶系列 (一)【下篇】:使用 CROSS JOIN 介绍高级T-SQL
标签:最小化 tin 结果 问题 varchar values 创建 有一个 ros