2009-11-10 56 views
0

我有一個C#程序,從數據庫中檢索多行,但目前在同一連接上一次做一個。最佳代碼 - 一個大的查詢,但更復雜的數據檢索或大量的小查詢

它會更好寫它,這樣,而不是重複運行(其中等等,每次變化):

select data from table where name = 'blah' 

喜歡的東西:

select name, data from table where name in ('blah','blah2','blah3') 

我很緊張令這因爲我不確定從結果表中檢索這些數據的額外開銷。

請注意,所以我不能做任何事情一樣示例數據並不能代表實際的數據:

select name, data from table where name like 'blah%' 

而且這是在高應力環境,讓即使是最輕微的改善可能是顯著有益。

由於提前, 湯姆

+0

可能重複[哪個更好?有幾個SQL查詢或有大量數據的一個SQL數據(http://stackoverflow.com/questions/4315658/which-is-更好的幾個SQL查詢或一個SQL數據與批量的數據) – 2012-06-07 06:32:24

回答

1

參數化查詢既快速又安全。它緩存查詢計劃並防止SQL injection

SELECT name, data 
FROM table 
WHERE name in (@name1, @name2, @name3) 

在調用代碼中,您可以根據需要添加參數。例如(C#):的

var command = connection.CreateCommand(); 
command.CommandText = "SELECT name, data FROM table WHERE name in ("; 
int index = 0; 
string separator = ""; 
foreach (string value in valueList) 
{ 
    string paramName = "@p" + Convert.ToString(index); 
    command.CommandText += separator + paramName; 
    command.Parameters.Add(paramName, value); 
    separator = ", "; 
    index++; 
} 
command.CommandText += ")"; 
+0

但是這假定你知道參數的數量。目前我只是使用Append.Format來創建查詢。 – tgandrews 2009-11-10 10:36:25

+0

偉大的一點。我編輯了我的答案來處理可變數量的參數。 – 2009-11-10 11:24:02

2

我會去一個矮胖的請求。至少從性能的角度來看,這是更好的方法。

2

到DB的一次旅程比多次小點擊更有效率。

2

我期望使用單個語句來獲得更好的性能,並且您將減少與語句準備,提交和執行相關的開銷。但是,與任何優化一樣 - 您應該在嘗試之前嘗試並測量它。

您可能還想看看準備和提交一批報表,而不是提出個別請求。此外,對於第一種情況,請檢查您是否正在準備語句並緩存準備好的語句 - 從而節省了重複編譯語句時的開銷。

+0

這是相當困難的。它是一個SQL服務器上的程序集。 – tgandrews 2009-11-10 09:54:01

2

理論上,一個查詢更好。即使數據庫中的處理時間相同,您也可以通過避免數據庫服務器和客戶端之間的多重往返通信來節省資源和時間。

也就是說,這是一種需要分析實際測量所做更改改進的問題。

0

我會去一個操作通過一個存儲過程調用

select data from table... etc.etc. 

:那麼這將讓你與SQL邏輯(可能的優化)修修補補而無需改變您的前端代碼什麼。

0

一種說法是最好的,並通過優化數據庫..