我需要對比較小的SQL Server表(< 10,000行)計算一大組條件(我不知道它們是否提前)。每個條件都採用SQL where子句的形式。目前,我以「select_ count(*)from some_table」的形式構建完整的sql語句,其中「+ Where_Clause;我讓SQL Server將計數返回給我。我這樣做是爲了獲得所有各種條件所需的所有計數。在沒有SQL Server的情況下在c#中評估SQL where子句
我正在尋找方法來加速這一點,當我有幾十或數百計我需要運行。我不知道提前發表的聲明。有些會選擇整個表格,有些可能不會選擇任何行。我嘗試了以下解決方案:
- 發出並行查詢 - 看見沒有這樣做,即使最小的任何改進的鎖定
- 編寫他們複雜的計數的case語句,所以我可以運行多個,其中在一個聲明中的條款
- 傳遞許多查詢一起作爲工會和獲得的結果早在一個結果集
這些選項都不得不在運行時(有時它會運行更慢)實現了重大改進,並增加了複雜性,我感覺不到任何他們是值得的。
我的問題是:我可以非常快速地將整個表加載到一個DataTable對象,只需運行一個「select *」來對付它。如果我在內存中使用了整個表,有沒有一種方法可以對SQL Server進行計數?我希望能切出的開銷:網絡,I/O,鎖定等
最複雜的where子句會是這樣的:
a=1 or b in (2,3) or c<4 or d like '%5' or substring(e,2,1)='z'
因此,這不是小事,並支持如儘可能多的T-SQL將是理想的,但我不認爲DataTable的.Select()方法支持這個或是非常快。因此,如果給定內存中的數據表,我可以使用T-SQL語法快速(或並行)使用行嗎?
您可以查看Dynamic Linq以查看它是否執行得更好... http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the -linq動態查詢,library.aspx。如果已知過濾條件列表,您可能也可以使用PredicateBuilder ... http://www.albahari.com/nutshell/predicatebuilder.aspx –
是否有一組預定義的where子句?還是按用戶的要求合成? –
用戶使用其他工具創建它們。每個查詢都有一個名稱,所以在生成報告時,他們想知道有多少行與每個條件集匹配,並在其上放置一個名稱。因此,他們會得到一些報告:「好:100,壞:50,紅色:25,黃色:100 ...」等等。無論用什麼標準他們設計了許多查詢,但都是針對一張小桌子這就是爲什麼我要加載一次表並將它們全部在內存中運行。 – powlette