-1

我有一个带有几个连接的简单查询。该查询有大约 4 或 5 个 WHERE 条件,但最多需要 15 秒才能返回 NO 结果。但是,如果我排除特定的 OR 条件,则只需 5 秒并返回大约 20 行。

无论如何,我认为也许我应该以某种方式重构 OR,因为它们没有任何内部选择或任何花哨的东西,只是列上的一个简单条件。

有任何想法吗?这似乎不是表锁定问题,我直接通过 SQL Management Studio(2008 RC2 服务器)运行查询。

4

3 回答 3

2

可能:

  1. 您的统计信息不是最新的
  2. 您的索引需要重建
  3. 或者您正在经历参数嗅探
  4. 您有“缺失”的索引
  5. 以上的组合

需要更多细节。

于 2011-05-24T06:41:02.267 回答
0

你看过实际的条款本身吗?例如,跨大型表的字符串比较可能会占用大量处理器。如果您绝对必须有该子句,也许您应该将“快速”结果集转储到临时表中,并从那里使用您的慢速子句进一步过滤。

您还应该查看您的指数 - 完全相同的效果适用;一两个索引会将您的查询变成两部分搜索,即基于索引的快速潜在结果查找,然后是对子结果的缓慢但有限的搜索。

于 2011-05-24T06:42:02.387 回答
0

没有任何细节,这是我学到的一件事。

Select * from mytable where dateadd(day,1,table_date) > getdate()

将运行AGES

然而

select * from mytable where table_date>dateadd(day,-1,getdate())

更快。因为计算可以完成一次,并与直接潜在指标进行比较。

于 2011-05-24T06:42:54.557 回答