カーソルのパフォーマンスの最適化

最高のパフォーマンスが改善されている技術をカーソル:回避すべきカーソルを使用した場合。

 

- ケン・ヘンダーソン「Transact-SQLの権威ガイド」からの抜粋[と]

    最高のパフォーマンスが改善されている技術をカーソル:回避すべきカーソルを使用した場合。SQL Serverは、データセットを処理し、リレーショナルデータベースは、単一のアクセス回線は関係DBMSに適合しない単一の行を扱うよりもはるかに優れています。カーソルを使用しているとき、それは避けることができない場合は、次のヒントとカーソルのパフォーマンスを最適化することができます。
(1)そうでない場合を除き、静的/小文字を区別しないカーソルを使用する必要はありません。静的カーソルをオープンすると、すべての行が一時テーブルにコピーされる原因になります。これは、変化に敏感ではない理由である-それは実際にはデータベースのテーブルの一時的なバックアップを指しています。当然のことながら、結果セットが大きいほど、静的カーソル上の文では、より多くのリソースの競合一時的なデータベースの問題につながります。
(2)それ以外の場合を除き、あなたはキーセットカーソルを使用する必要はありません。そして、静的カーソルは、のような、オープンキーセットカーソルは一時テーブルを作成します。が、このリストは、(一意のキーが存在しない場合を除く)ベーステーブルの1つのキーだけの列が含まれていますが、まだかなり大きな、大きな結果セットを扱うとき。
(3)読み取り専用一方向結果セットを処理する場合、代わりにFORWARD_ONLY FAST_FORWARD用います。FAST_FORWARDカーソルが特定の内部READ_ONLYパフォーマンスの最適化を持っている、FORWARD_ONLYを定義し使用してください。
(4)READ_ONLYキーワードを使用すると、読み取り専用カーソルを定義します。これは偶然の変更を防ぎ、サーバは、カーソルが移動したときに知っている行を変更しませんしましょう。
(5)カーソル注意深く修飾トランザクションを介して大量の行。トランザクション分離レベルの前にロックされたままによると、これらの行またはロールバック・トランザクションは、サーバー上のリソース競合を引き起こす可能性がある、完成されています。
同じ行または列の変更の過ちを繰り返す- 。彼らは「ハロウィン」の問題が発生しますので、(6)、慎重な動的カーソルが変化し、特にカーソルの非クラスタ化インデックスユニークキーテーブルの上に構築されます。SQL Serverは、後に既にキーワード意志内の行に存在する値に変更し、追加のインデックスサーバーを強制するので、あなたがして、結果セットを移動することができます。結果セット内の残りの項目からアクセスは、行に遭遇すると、プログラムが繰り返される場合、無限ループを生じます。
(7)大結果を呼び出し側に制御することができる限り、非同期カーソルを使用して検討し設定します。可動テーブルに設定され、大きな結果を返すときに、アプリケーションは、ほぼ即座にラインを表示することを可能にするため、非同期カーソルは、特に有用です。

ハロウィーン:

CREATE  (#Tを
    K1のint型、その トップにアイデンティティ(1,1),,
    C1 int型 はnull
);
 
CREATE  CLUSTERED  INDEX C1 ON #T(C1)を、
 
INSERT INTO #T(C1)VALUES(8)
INSERT INTO #T(C1)VALUES(6)
INSERT INTO #T(C1)VALUES(7)
INSERT INTO #T(C1)VALUES(5)
INSERT INTO #T(C1)VALUES(3)
INSERT INTO #T(C1)VALUES(0)
INSERT INTO #T(C1)VALUES(9)
 
 
DECLARE C CURSOR  DYNAMICを
    FOR  SELECT K1、C1 FROM #T。
 
OPEN C
FETCH Cを
WHILE(@@ FETCH_STATUS = 0)
ベギン
    UPDATE #T SET C1 = C1 + 1
        WHERE  CURRENT  OF C。
    FETCH Cを。
終わり
 
CLOSE C;
DEALLOCATE C;
 
DROP   #T。
GO

ます。https://www.cnblogs.com/happyhippy/archive/2009/03/29/1424441.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34402408/article/details/94676460
おすすめ