![]() |
1
3
对于这种情况,没有“一刀切”的查询方法,在如何做到这一点上会有细微的性能影响。如果您不只是想让查询返回正确的答案,不管速度有多慢,请看本文: Dynamic Search Conditions in T-SQL by Erland Sommarskog . 它涵盖了每一种方法,并给出了每一种方法的优缺点。 如果可以确定搜索列的最小和最大可能范围,并且搜索列不为空,则可以做得比(@search为空或col=@search)更好, see this area of the above linked article . 然而,您应该阅读整篇文章,根据您的情况,有很多变化,您真的需要学习多种方法以及何时使用它们。 另请参阅其他最近的答案: SQL Server 2008 - Conditional Query |
![]() |
2
1
好的,我们开始吧 选项(重新编译) 是必须的,否则将重用第一个查询计划,无论参数如何匹配。抱歉,没有真正的方法能做得更好。 除此之外-不,对不起。动态SQL可以变得更高效(通过避免IS空选项),但如果不可能的话,您基本上已经确定了它。 对于动态SQL,如果homephone变量为空,则基本上没有针对hp.phonenumber的aline;) |
![]() |
3
1
在您的例子中,不同的查询将使用不同的索引。
您应该定义一组要使用的索引,并为每个集合编写一个单独的查询,替换
|
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 6 月前 |
![]() |
Marc Guillot · 记录值时忽略冲突 7 月前 |
![]() |
Fachry Dzaky · 正确使用ROW_NUMBER 7 月前 |
![]() |
TriumphTruth · 从满足特定条件的数据集中选择1行 7 月前 |