2012-03-03 2 views
0

READ COMMITTED分離レベルで実行されるトランザクションがあります。トランザクション内では、主キーとしてDocId、VendorId、CompanyIdおよびProgramIdに3つのインデックスを持つDocsというテーブルに10,000行を挿入します。ただし、データをコミットするまでインデックスが更新されないようです。これは本当ですか?コミットが呼び出される前にトランザクション内でインデックスを強制的に更新する方法はありますか?データをINSERTするときにインデックスがトランザクション内で更新されない?

+1

この信念を具体化するためには何が必要ですか? –

+0

私はDamienに同意します:なぜ彼らは更新されていないと思いますか? –

+0

結合内のテーブル「CustomerDocs」の1つに多くのレコードを追加した後、トランザクション内のクエリQ1が非常に長い時間がかかります。 'CustomerDocs'にレコードがほとんどない場合、多くの行を挿入してもクエリーQ1が遅くなることはありません。だから私はQ1が同じトランザクション内に挿入された行のためのインデックスがない場合は、より長い時間がかかるテーブルスキャンを行っていると思います。 – Sunil

答えて

1

(インデックスが無効になっていない限り)これは真です。 コミットされていないインデックスの更新は、READ UNCOMMITTED分離レベルまたはnolockヒントでのみ使用できます。

なぜそれが問題になるのですか?コミットされていないデータを本当に見る必要がありますか? Read uncommitedは通常、新しいデータを読み取らないようにロックオーバーヘッドを避けるために使用されます。

+0

インデックスを同じインデックス内で使用できるようにするには、READUNCOMMITEDモードでトランザクションを実行する必要がありますか? – Sunil

+0

インデックスを使用しているかどうかわからないような音がします。実行計画を見て、それが正しいかどうかを確認します。クエリを実行する前にSSMSのCtrl + Mを押します。 –

関連する問題