用不同的时间查询结果

时间:2014-05-26 11:26:34

标签: sql sql-server tsql

我有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'

第一个查询会在几秒钟内返回结果,但第二个查询会长时间返回结果或者不返回任何结果。

这些类似查询的结果可能是什么原因?

2 个答案:

答案 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索引?