我有一个带有几个连接的简单查询。该查询有大约 4 或 5 个 WHERE 条件,但最多需要 15 秒才能返回 NO 结果。但是,如果我排除特定的 OR 条件,则只需 5 秒并返回大约 20 行。
无论如何,我认为也许我应该以某种方式重构 OR,因为它们没有任何内部选择或任何花哨的东西,只是列上的一个简单条件。
有任何想法吗?这似乎不是表锁定问题,我直接通过 SQL Management Studio(2008 RC2 服务器)运行查询。
我有一个带有几个连接的简单查询。该查询有大约 4 或 5 个 WHERE 条件,但最多需要 15 秒才能返回 NO 结果。但是,如果我排除特定的 OR 条件,则只需 5 秒并返回大约 20 行。
无论如何,我认为也许我应该以某种方式重构 OR,因为它们没有任何内部选择或任何花哨的东西,只是列上的一个简单条件。
有任何想法吗?这似乎不是表锁定问题,我直接通过 SQL Management Studio(2008 RC2 服务器)运行查询。
可能:
需要更多细节。
你看过实际的条款本身吗?例如,跨大型表的字符串比较可能会占用大量处理器。如果您绝对必须有该子句,也许您应该将“快速”结果集转储到临时表中,并从那里使用您的慢速子句进一步过滤。
您还应该查看您的指数 - 完全相同的效果适用;一两个索引会将您的查询变成两部分搜索,即基于索引的快速潜在结果查找,然后是对子结果的缓慢但有限的搜索。
没有任何细节,这是我学到的一件事。
Select * from mytable where dateadd(day,1,table_date) > getdate()
将运行AGES
然而
select * from mytable where table_date>dateadd(day,-1,getdate())
更快。因为计算可以完成一次,并与直接潜在指标进行比较。