|
|
1
4
是的,它们将被使用(很可能,检查执行计划——但我知道参数的可选性不会有任何区别) 如果您的查询有性能问题,那么这可能是参数嗅探的结果。尝试对存储过程进行以下更改,看看是否有任何不同:
这将禁用参数嗅探(SQL Server使用传递给SP的实际值对其进行优化)-在过去,我已经解决了一些奇怪的性能问题-但我仍然无法满意地解释原因。 您可能要尝试的另一件事是根据参数的空性将查询拆分为几个不同的语句:
这很混乱,但如果您遇到问题,可能值得一试——原因是SQL Server只能为每个SQL语句制定一个执行计划,但是您的语句可能返回非常不同的结果集。 例如,如果传入空值和空值,则返回整个表和最理想的执行计划,但是如果传入的日期范围很小,则更可能是行查找最理想的执行计划。 将此查询作为单个语句,SQL Server将被迫在这两个选项之间进行选择,因此在某些情况下,查询计划可能是次优的。但是,通过将查询拆分为多个语句,SQL Server在每种情况下都可以有不同的执行计划。
(您也可以使用
|
|
|
2
2
在SQL中有一篇关于动态搜索条件的伟大文章。本文中我个人使用的方法是x=@x或@x是空样式,在末尾添加了选项(重新编译)。如果你读了这篇文章,它会解释为什么 |
|
|
3
1
是的,根据查询提供的索引
然而,
|
|
|
4
0
大概不会。请看一下来自Tony Rogerson SQL Server MVP的博客: http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/05/17/444.aspx 你至少应该有这样的想法:你需要用可信的数据进行测试,并检查执行计划。 |
|
5
0
基于给定参数动态更改搜索是一个复杂的主题,以一种方式对另一种方式进行搜索,即使只有很小的差异,也可能会产生巨大的性能影响。关键是要使用索引,忽略压缩代码,忽略担心重复代码,必须制定一个好的查询执行计划(使用索引)。 阅读本文并考虑所有方法。您的最佳方法将取决于您的参数、数据、模式和实际使用情况: Dynamic Search Conditions in T-SQL by by Erland Sommarskog The Curse and Blessings of Dynamic SQL by Erland Sommarskog 上述项目中应用于此查询的部分是 Umachandar's Bag of Tricks ,但它基本上是将参数默认为某个值,以消除使用或的必要性。这将提供最佳的索引使用率和总体性能:
|
|
|
6
-1
我认为你不能保证索引会被使用。这将很大程度上取决于表的大小、显示的列、索引的结构和其他因素。 您最好使用SQL Server Management Studio(SSMS)并运行查询,并包含“实际执行计划”。然后您可以研究它,并准确地看到使用了哪些索引。 你经常会对你的发现感到惊讶。
尤其是在
|
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
Marc Guillot · 记录值时忽略冲突 1 年前 |
|
|
Fachry Dzaky · 正确使用ROW_NUMBER 1 年前 |
|
|
TriumphTruth · 从满足特定条件的数据集中选择1行 1 年前 |