2011-06-18 53 views

回答

2

儘量簡潔,我可以管理:

在關係數據庫引擎,所有的操作(無論是在存儲過程或沒有)通常會*變得更好用,只是因爲這些發動機進行優化SET-基於集合的邏輯基於操作。

對於引擎中的單個原子操作,無論是影響1行還是1,000,000行,通常都有固定的資源成本(可能相當高)​​。

遊標會產生更高的成本,因爲數據庫引擎必須將遊標狀態保持在原子操作成本之上。

*在程序邏輯性能優於基於集合的情況下,會出現一些邊緣案例/類問題(具體取決於您的RDBMS)。

0

所有(或幾乎所有)RDMS都針對基於集合的操作進行了優化,而不是基於行的。對於絕大多數情況,基於集合的解決方案都優於基於行的解決方案。例如,即使SELECT * FROM table1的執行速度比用光標執行速度快很多倍。但是,有些情況下光標解決方案表現更好。例如,在某些RDMS(即SQLServer 2005)中使用基於集合的方法計算運行聚合涉及多次重新調用數據,而基於光標的操作只需執行一次。
另一種需要使用遊標的情況是,應用程序的業務邏輯需要您分別處理每一行。