SQL Server技術問題之遊標優缺點

風靈使發表於2019-04-07

分類:

MS SQL SERVER 支援三種型別的遊標:Transact_SQL 遊標API 伺服器遊標客戶遊標

(1) Transact_SQL 遊標

Transact_SQL 遊標是由DECLARE CURSOR 語法定義、主要用在Transact_SQL 指令碼、儲存過程和觸發器中。Transact_SQL 遊標主要用在伺服器上,由從客戶端傳送給伺服器的Transact_SQL 語句或是批處理、儲存過程、觸發器中的Transact_SQL 進行管理。Transact_SQL 遊標不支援提取塊或多行。

(2) API 遊標

API 遊標支援在OLE DB, ODBC 以及DB_library 中使用遊標函式,主要用在伺服器上。每一次客戶端應用程式呼叫API 遊標函式,MS SQL SEVEROLE DB 提供者、ODBC驅動器或DB_library 的動態連結庫(DLL) 都會將這些客戶請求傳送給伺服器以對API遊標進行處理。

(3) 客戶遊標

客戶遊標主要是當在客戶機上快取結果集時才使用。在客戶遊標中,有一個預設的結果集被用來在客戶機上快取整個結果集。客戶遊標僅支援靜態遊標而非動態遊標。由於伺服器遊標並不支援所有的Transact-SQL 語句或批處理,所以客戶遊標常常僅被用作伺服器遊標的輔助。因為在一般情況下,伺服器遊標能支援絕大多數的遊標操作。

由於API 遊標和Transact-SQL 遊標使用在伺服器端,所以被稱為伺服器遊標,也被稱為後臺遊標,而客戶端遊標被稱為前臺遊標。

優點:

1)允許程式對由查詢語句select返回的行集合中的每一行執行相同或不同的操作,而不是對整個行集合執行同一個操作。

2)提供對基於遊標位置的表中的行進行刪除和更新的能力。

3)遊標實際上作為面向集合的資料庫管理系統(RDBMS)和麵向行的程式設計之間的橋樑,使這兩種處理方式通過遊標溝通起來。

缺點:
處理大資料量時,效率低下,佔用記憶體大;
一般來說,能使用其他方式處理資料時,最好不要使用遊標,除非是當你使用while迴圈,子查詢,臨時表,表變數,自建函式或其他方式都無法處理某種操作的時候,再考慮使用遊標。


資料庫遊標的作用及優缺點

遊標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。遊標充當指標的作用。儘管遊標能遍歷結果中的所有行,但他一次只指向一行。

概括來講,SQL的遊標是一種臨時的資料庫物件,即可以用來存放在資料庫表中的資料行副本,也可以指向儲存在資料庫中的資料行的指標。遊標提供了在逐行的基礎上操作表中資料的方法。

遊標的一個常見用途就是儲存查詢結果,以便以後使用。遊標的結果集是由SELECT語句產生,如果處理過程需要重複使用一個記錄集,那麼建立一次遊標而重複使用若干次,比重複查詢資料庫要快的多。

大部分程式資料設計語言都能使用遊標來檢索SQL資料庫中的資料,在程式中嵌入遊標和在程式中嵌入SQL語句相同

因為我們做的資料量大,而且系統上跑的不只我們一個業務。所以,我們都要求儘量避免使用遊標,遊標使用時會對行加鎖,可能會影響其他業務的正常進行。而且,資料量大時其效率也較低效。另外,記憶體也是其中一個限制。
因為遊標其實是相當於把磁碟資料整體放入了記憶體中,如果遊標資料量大則會造成記憶體不足,記憶體不足帶來的影響大家都知道了。
所以,在資料量小時才使用遊標

相關文章