【发布时间】:2010-07-16 02:10:31
【问题描述】:
我有一个表 Sheet1$,其中包含 616 条记录。我有另一个表,Rates$,其中包含 47880 条记录。 Rates 包含从邮寄日期起 90 天内工作表中给定记录的响应率。在记录速率关系的所有 90 天内,总响应始终为 1 (100%)
例子:
Sheet1$: Record 1, 1000 QTY, 5% Response, Mail 1/1/2009
Rates$: Record 1, Day 1, 2% Response
Record 1, Day 2, 3% Response
Record 1, Day 90, 1% Response
Record N, Day N, N Response
因此,我编写了一个视图,该视图采用这些表并将它们连接到费率的右侧以扩展数据,这样我就可以执行一些数学运算来获得任何给定记录的每日回报。
SELECT s.[Mail Date] + r.Day as Mail_Date, s.Quantity * s.[Expected Response Rate] * r.Response as Pieces, s.[Bounce Back Card], s.Customer, s.[Point of Entry]
FROM Sheet1$ as s
RIGHT OUTER JOIN Rates$ as r
ON s.[Appeal Code] = r.Appeal
WHERE s.[Mail Date] IS NOT NULL
AND s.Quantity <> 0
AND s.[Expected Response Rate] <> 0
AND s.Quantity IS NOT NULL
AND s.[Expected Response Rate] IS NOT NULL);
所以我将它保存为一个名为 Test_Results 的视图。我使用 SQL Server Management Studio 运行此查询并获得 211,140 条记录的结果。经过时间为 4.121 秒,Est。子树成本为 0.751。
现在我对此视图运行查询以汇总每天的件数。
SELECT Mail_Date, SUM(Pieces) AS Piececount
FROM Test_Results
GROUP BY Mail_Date
这将返回 773 行,并且只需要 0.452 秒即可执行! 1.458 东部时间。子树成本。
我的问题是,以更高的估计,它是如何比原始视图本身执行得这么快的?!我会假设一块可能是它返回到管理工作室的行。如果是这种情况,我将如何在不考虑返回反馈的情况下查看此查询的真实成本?
【问题讨论】:
标签: sql-server tsql query-optimization