我在我們的數據庫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/ –