我在我们的数据库DB中有一个60亿行的表,这基本上是几年内发生的所有事务。这有ColumnStore索引,其中包含所有列,并且没有其他索引。有一个用户界面,用户将提供多个搜索条件(比如基于日期/金额/支付类型)等,我必须查询此表并返回TOP 1000结果。SQL Server动态WHERE子句
我已经通过了以下建议的各种帖子。
使用具有各种if条件的变量并动态构建sql。使用sp_executesql的 - 的SQL变得非常混乱与所有这些逻辑
使用
Coalesce
,IsNull
或CASE
在WHERE
条款 - 这看起来简洁,但非常缓慢。例如WHERE Total = 10
需要(1秒),而Total = Coalesce(@Total, Total)
需要几分钟才能运行。相同的延迟与IsNull
和CASE
我只是想确认是否有没有其他办法可以做到动态SQL除了上述2点的方法?欣赏你的想法。谢谢!
这通常称为“全部通过”查询。它们在搜索和其他用途中非常常见。这里有一篇关于这个主题的伟大文章,讨论了使这些工作快速完成的几个选项。 http://www.sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/ –
Gail Shaw的另一篇文章... https://www.red-gate.com/simple-talk/sql/t-sql-programming/how-to-confuse-the-sql-server-query-optimizer/ –