当 endDate 为 null 时,此查询需要很长时间(我认为它是关于 case 语句,在 case 语句之前它很快)
SELECT *
FROM HastaKurumlari
WHERE CONVERT(SMALLDATETIME,'21-05-2009',103)
BETWEEN startDate
AND (CASE WHEN endDate IS NULL THEN GETDATE() ELSE endDate END)
当 endDate 为空时,我应该使用什么来加快速度?
最佳答案
这是没有 CONVERT 或 CASE 的查询:
SELECT *
FROM HastaKurumlari
WHERE '21-05-2009' between startDate and IsNull(endDate,getdate())
为了确保 Sql Server 不会对每一行计算 getdate(),您可以缓存它,尽管我很确定 Sql Server 默认情况下足够智能:
declare @now datetime
set @now = getdate()
SELECT *
FROM HastaKurumlari
WHERE '21-05-2009' between startDate and IsNull(endDate,@now)
发布查询计划可以帮助解释查询速度慢的原因:
SET SHOWPLAN_TEXT ON
go
SELECT *
FROM HastaKurumlari
WHERE CONVERT(SMALLDATETIME,'21-05-2009',103)
BETWEEN startDate
AND (CASE WHEN endDate IS NULL THEN GETDATE() ELSE endDate END)
关于sql - 如何使此语句更快 : "paramDate Between startDate and NULL"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/847750/