我有2个查询,它们几乎相似。
查询#1。
declare @dateStart datetime= '4/3/2014 12:00:00 AM'
declare @dateEnd datetime = '4/25/2014 12:00:00 AM'
SELECT *
FROM vFailed (NOLOCK)
WHERE dtm>= @dateStart AND dtm< @dateEnd AND mediaNo = 'xyz'
查询#2:
SELECT *
FROM vFailed (NOLOCK)
WHERE dtm >= '4/3/2014 12:00:00 AM'
AND dtm < '4/25/2014 12:00:00 AM' AND mediaNo= 'xyz'
第一个查询会在几秒钟内返回结果,但第二个查询会长时间返回结果或者不返回任何结果。
这些类似查询的结果可能是什么原因?
答案 0 :(得分:0)
在query_1中,您要将日期时间与日期时间进行比较。在query_2中,您要与varchar进行比较,从而将查询中的所有日期时间转换为字符串,并将其与给定字符串进行匹配。 query_2应该是什么样的(事先将字符串转换为日期时间):
SELECT *
FROM vFailed (NOLOCK)
WHERE dtm >= convert(datetime,'2014-04-03 00:00:00',120)
AND dtm < convert(datetime,'2014-04-25 00:00:00',120)
AND mediaNo= 'xyz'
答案 1 :(得分:0)
我进行了测试并获得了相同的执行计划和相同的时间 查询优化器并排表示每个占总数的50% 还有其他东西在这里
发布/检查您的执行计划
取出I / O,请尝试选择计数(*)
我正在看一张超过100万行的桌子 我尝试了一些其他日期列并确实获得了一些不同的执行计划 第二个是更快的 但两者都跑了不到一秒钟 你有和dtm索引?