我们有一些用户表单,其中包含“期间”菜单,用户可以请求服务器返回特定日期范围的数据,例如“2008年10月1日至10日期间发出的采购订单”。
然后逻辑是“在运行中”将日期范围添加到原始sql查询并重新查询数据。添加到查询的过滤器的语法是:
WHERE myDate >=dateMin and myDate <= dateMax
或者,如果原始查询已经有过滤子句:
WHERE <original filter> AND (myDate >=dateMin and myDate <= dateMax)
同时使用'YYYYMMDD'格式的dateMin和dateMax。
我们昨天开始为我们的“错误”表单获取一些查询超时,它专门请求我们的“错误”表。经过一些测试后,似乎只有在从Error表和10月份请求数据时才会发生此超时问题。当在同一个表上使用另一个范围(9月,8月或其他)发送时,具有相同语法(仅更改dateMin和dateMax值)的相同查询没有超时!这种情况发生在从应用程序发送或直接从Sql Server Management Studio发送时。
我们通过在错误表的errorDate列上添加索引来避免超时问题(我们之前应该这样做,我知道,但我们忘记了!)。在10月份的日期请求时,我们的查询延迟仍然是标准延迟的4到5倍! 我们一直在尝试查询较小的intervalls,例如“前15天”,“过去15天”。 “前15天”查询花费的时间比最近15天的查询要长,这仍然比其他时段的查询慢得多。
我觉得这个问题只是避免了,并没有真正解决,我仍然对这种行为感到非常不安。有没有人注意到这些奇怪的事情,或者有没有人对正在发生的事情有任何想法?
答案 0 :(得分:1)
我建议你update your statistics和rebuild the indexe s。
另请注意,您可以使用BETWEEN,例如:
WHERE myDate BETWEEN dateMin and dateMax