第二個要快多少取決於太多的東西。與結果集的大小相比,網絡開銷可能是微不足道的。
還有另一種選擇(它應該比鎖定行爲更快),即call all of them asynchronously - 那麼當最長的頁面完成時,您的頁面可以有效地完成。顯然,這將需要一些額外的編碼。
在這個例子中,只有一個SP開銷。我們假設該SP返回單個行集客戶端將拆分/過程或多個行集:
int[] ids; // array of ids
CallSQLStoredProc(ids) // stored procedure returns more than one row for each id
在這個例子中,SP調用開銷N次單呼。和調用序列:
foreach(item in mylist) {
CallSQLStoredProc(item.id);
}
在第三種方式:
foreach(item in mylist) {
StartSQLStoredProc(item.id);
}
// Continue building the page until you reach a point where you absolutely have to have the data
wait();
這仍然具有n個DB調用的開銷,但性能的提升可以依賴於SQL服務器和網絡的能力爲了平行工作量。此外,您還可以在頁面構建時啓動SQL Server的工作。
單個SP解決方案仍然可以勝出,特別是如果它可以用UNION組裝SQL Server可以並行化任務的單個結果集。但是,如果結果集具有單獨的模式或者UNION不能很好地執行,多個SP異步解決方案可以將其打敗(並且還可以利用在頁面中執行其他工作的能力)。
你使用哪個db? 我正在SQL Server中尋找這個函數「spiltCSVs」。 谷歌「spiltCSVs」返回我1結果:-) – 2009-03-24 03:46:05
這是一個實用功能,每個人都根據需要自行編寫。 http://stackoverflow.com/questions/314824/t-sql-opposite-to-string-concatenation-how-to-split-string-into-multiple-recor – 2009-03-24 13:21:29