このREADPAST
ヒントを使用して、アプリケーションの金融サブシステムのリソースロックを削減することを調査しています。
金融取引記録は追加されるだけで、更新または削除されることはないため、良い方法のように思えました。スキップされる行は、トランザクション内に挿入された新しい行のみです。トランザクションがコミットされるまで、それらは事実上外界には存在しません。
ただし、READPAST
ヒントを付けたインデックス付きビューを使用するクエリのパフォーマンスが低下していることに気付きました。クエリプランを比較すると、ヒントのように見えます。クエリオプティマイザーは、インデックス付きビューを使用しないことを選択し、代わりに通常のビューのように扱います。
それがなぜかはわかりません。インデックス付きビューは、操作中にキーをロックでき、追加READPAST
も同様に機能するという点で、他のインデックスと同じだと思います。
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST)
WHERE isa.TotalOwedAmount = 0.0
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa
WHERE isa.TotalOwedAmount = 0.0
NOEXPAND
ヒントの追加も機能するようですREADPAST
が、クエリオプティマイザーがそもそもなぜ(完全な回答の一部として)選択したのか、おそらくその理由について詳しく知りたいと思います。