我正在研究ASP.NET MVC項目,該項目允許用戶通過一次添加items子句構造任意複雜的查詢。使用SQL Server和.NET構建增量查詢
然後,應用程序生成適當的SQL,運行它(當前使用SQL Server 2008)並顯示結果,其中包含每個添加項目的匹配記錄數。
例如
UserQuery:
已ConditionA(45)
而ConditionB(33)
或者ConditionC(55)
而ConditionD(15)
共有48條
的問題是如何以最佳方式構建和運行SQL,從而在考慮到性能和可伸縮性的情況下生成這些結果。
初始實現依次爲每個項目(與前一個結合)構建一個查詢(使用子查詢),並將它們作爲標量單獨運行。每個執行都涉及生成SQL並打開新的SqlConnection,創建新的SqlCommand並執行。
我花了一段時間重新編寫這個來產生一個查詢(它使用CTE)返回一行,每個項目的結果作爲一列。
這隻需要一個執行和性能似乎略微有利,直到查詢變得複雜和SQL Server開始引發錯誤:
查詢處理器跑出 內部資源,無法 生成查詢計劃
構建和運行此類查詢的最具可伸縮性和有效性的方式是什麼?
感謝您的提問 - 一個有用的建議,因爲它讓我以不同的方式考慮問題。儘管我沒有機會嘗試和實施它。 – TonE 2010-09-23 11:25:47