以下两个查询中,哪一个更快?该表包含超过100M条记录。所以我只想知道在where子句中使用ISNULL是否与首先为变量赋值并仅在where子句中使用变量相同?日期范围查询方法的性能比较
declare @dt datetime
select COUNT(*) from pandl
where PaymentDate >= ISNULL(@dt, convert(nvarchar(10),getdate(), 121))
select @dt = ISNULL(@dt, convert(nvarchar(10),getdate(), 121))
select COUNT(*) from pandl
where PaymentDate >= @dt
你是否运行它们以查看哪个更快?您是否使用过SQL Profiler来查看每个查询的执行计划? – Pondlife 2012-02-17 13:54:28
你想使用多少个不同的“现在”值?第二个查询捕获当前的日期/时间,如果需要的话,然后搜索。 – HABO 2012-02-17 14:04:31
@ user92546这是一个很好的观点,但仅仅为了添加一些信息,即使'getdate()'在第一个查询过程中被多次评估(我将不得不运行一些测试来验证),因为转换将它舍入了它直到今天,如果查询在午夜之前开始并且仍然在处理(并且在午夜之后将新值赋给'getdate()'),那才真正重要。我完全同意你的看法,一次分配更好,只是想澄清什么时候它可能非常糟糕,而不是“最好”。 – 2012-02-17 14:18:26