SELECT BlackWidow.dbo.LastBusinessDay('2015-12-31',DEFAULT)
SELECT *
FROM BlackWidow.dbo.TurnoverTradesMarketCapCountry ('2015-12-31', 50, 20, 50, 100000, 1000000000, 3, 'Brazil')
SELECT *
FROM BlackWidow.dbo.TurnoverTradesMarketCapCountry (BlackWidow.dbo.LastBusinessDay('2015-12-31',DEFAULT), 50, 20, 50, 100000, 1000000000, 3, 'Brazil')
DECLARE @date as DATETIME
SET @date=BlackWidow.dbo.LastBusinessDay('2015-12-31',DEFAULT)
SELECT *
FROM BlackWidow.dbo.TurnoverTradesMarketCapCountry (@date, 50, 20, 50, 100000, 1000000000, 3, 'Brazil')
有什么建议为什么在案例3中花费的时间比在案例4中花费的时间多得多?
答案 0 :(得分:0)
性能差异最可能的解释是SQL Server中的查询优化器无法正确估计第一个查询中的查询成本。优化器不知道函数的返回将提前是什么,因此在执行之前无法估计查询的适当成本。此限制意味着可以选择极差的查询计划来执行。
优化器评估第二个查询要容易得多,因为一旦分配了@date变量,查询优化器就能够以更经济的方式执行查询执行。
这些操作功能相同,但在SQL Server执行时它们并不完全相同。要确认您可以查看估计的查询执行情况,并查看SQL优化程序估计的成本差异。然后运行查询并查看实际的执行计划。即使功能上他们完成同样的事情,他们也不会是一样的。