【发布时间】:2017-07-28 07:05:02
【问题描述】:
我在我们的数据仓库数据库中有一个包含 60 亿行的表,它基本上是几年内发生的所有事务。这具有包含所有列的 ColumnStore 索引,并且没有其他索引。有一个用户界面,用户将提供多个搜索条件(例如基于日期/金额/付款类型)等,我必须查询此表并返回 TOP 1000 结果。
我已经阅读了下面建议的各种帖子。
使用具有各种if条件的变量并动态构建sql。使用 sp_ExecuteSQL - SQL 在所有这些逻辑中变得非常混乱
在
WHERE子句中使用Coalesce、IsNull或CASE- 这看起来很简洁,但速度非常慢。例如WHERE Total = 10需要(1 秒),而Total = Coalesce(@Total, Total)需要几分钟才能运行。IsNull和CASE的延迟相同
我只是想确认除了上述两种方法之外是否没有其他方法可以执行动态 SQL?欣赏你的想法。谢谢!
【问题讨论】:
-
这通常称为“包罗万象”查询。它们在搜索和其他用途中非常常见。这是一篇关于该主题的精彩文章,其中讨论了使这些工作快速运行的几个选项。 sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries
-
关于该主题的另一篇 Gail Shaw 文章...red-gate.com/simple-talk/sql/t-sql-programming/…
标签: sql sql-server dynamic-sql