复杂SQL where子句:许多'和'和'或'条件

时间:2014-02-18 16:55:58

标签: sql sql-server

我有一个生成的查询到MS SQL Server,复杂的where子句如下:

(t1.Column1 = SomeValue1 and t1.Column2 = SomeValue2)
OR (t1.Column1 = SomeValue3 and t1.Column2 = SomeValue4)
OR (t1.Column1 = SomeValue5 and t1.Column2 = SomeValue6)
...
(50 or more conditions like this)

实际上我有3级深度的层次结构列表。我想用一个查询检索所有第三级项目。所以t1.Column1这里是第一个父,t1.Column2是第二个父。我在WHERE子句中有很多条件,因为在列表的第二级扩展了很多项。在最坏的情况下可以有1000或更多。

我想知道这是否会影响查询性能。如果是这样,有没有办法优化它(表值参数等)?

我已经对查询计划和查询编译时进行了一些调查。两个看起来都不错。

1 个答案:

答案 0 :(得分:1)

我要在这里走出去回答;这个答案是不正确的,因为根据您的详细程度,没有真正的“正确”答案。但是,这里有一些可能的提示(假设您的查询中需要1000个子句):

  • 尝试在创建和执行后保持查询的一致性。它可能需要一些时间来编译,但是一旦编译,缓存应该完成它的工作,除非你不断改变它(即使你只是改变了值)。如果值需要更改,请使用绑定变量。

  • 索引 - 确保将两列都编入索引。提供他们两个都是,你总是查询两个,那么你应该没事。

作为对此的一个警告 - 我不是说这是查询数据库的好方法,只是上面两点应该有所帮助。