關於選擇資料指標類型

選擇資料指標類型時需考慮多種變數,包括:

  • 結果集大小。

  • 可能需要的資料百分比。

  • 開啟資料指標的效能。

  • 資料指標作業的需求,例如捲動或定位更新。

  • 其他使用者修改資料的可見度層級。

如果沒有執行更新作業,小型的結果集可使用預設值;但是大型的結果集最好使用動態資料指標,幫助使用者在擷取許多資料列前就找到所需的答案。

如果要擷取的資料會一次消耗完畢,並且沒有需要定位更新或進行捲動時,會建議使用預設結果集。SQL Server 會在使用 Multiple Active Result Set (MARS) 時,移除防止具有多個尚未處理完畢預設結果集的限制。

選擇資料指標類型的規則

選擇資料指標類型時有些簡單的規則可循:

  • 可能時請使用預設結果集。如果需要進行捲動,與其要求伺服器實作資料指標,不如在用戶端快取小型的結果集並捲動快取區,這樣顯得更有效率。

  • 將整個結果集提取至用戶端時 (例如產生報告時),請使用預設值。預設結果集是將結果傳輸至用戶端的最快方式。

  • 如果應用程式使用定位更新則無法使用預設結果集。

  • 只要 Transact-SQL 陳述式或 Transact-SQL 陳述式批次會產生多筆結果集,就必須使用預設結果集。

  • 動態資料指標開啟速度較靜態或索引鍵集導向的資料指標來的快。靜態和索引鍵集導向的資料指標開啟時,系統必須建立內部暫存工作表,但是動態資料指標不需使用此工作表。

  • 經過聯結後,索引鍵集導向的資料指標 (Keyset-driven Cursor) 和靜態資料指標的速度會比動態資料指標快。

  • 如果您希望使用絕對擷取,務必要使用索引鍵集導向的資料指標或靜態資料指標。

  • 靜態和索引鍵集導向的資料指標會將 tempdb 的使用率提高。靜態伺服端資料指標會將整個資料指標內建於 tempdb;索引鍵集導向的資料指標則將索引鍵集 (Keyset) 內建於 tempdb

  • 如果資料指標必須於復原作業中保持開啟的狀態,請使用同步靜態資料指標,並將 CURSOR_CLOSE_ON_COMMIT 設定為 OFF。

使用伺服端資料指標時,每個呼叫 API 擷取函數或方法的作業會造成連至伺服端的往返作業。應用程式應使用區塊資料指標來處理每回擷取傳回的大量 (但可承受的) 資料列,來儘量降低這些往返作業。