SQL Server 2008 データベースとSET ALLOW_SNAPSHOT_ISOLATION ON
、列 ID (主キー) と SSN (一意の非クラスター化インデックス) を持つ Person テーブルがあります。
データベース内の行の 1 つは、ID = 1、SSN = 776-56-4453 です。
1 つ 1 つの接続で、次のことが起こります。
set transaction isolation level snapshot
begin transaction snapshot
while (1 = 1) select * from person where SSN = '777-77-7777'
次に、別の接続で:
update person set SSN = '555-55-5555' where ID = 1
予想どおり、最初の接続では、2 番目の接続の実行が終了した後も SSN が '777-77-7777' として表示され続けます。最初の接続の実行計画は、SSN で「クラスター化されたインデックス シーク」を示していますが、他の接続でインデックス キーが更新されている場合、最初の接続はどのようにインデックスを使用し続けることができますか?
これに対応するために、SQL サーバーは複数のバージョンのインデックスを保持するために何か特別なことをしますか?
スナップショット分離レベルのパフォーマンス特性を理解しようとしているので、行の以前のバージョンから古いデータを取得する場合でも、SQL Server が既存のインデックスを使用できるほどスマートであることを確認したいと考えています。