に基づいて無視され、私はこの文SQL Serverの:インデックスが実行計画
UPDATE QP.LocalMessage WITH (UPDLOCK, ROWLOCK)
SET StatusId = 0
WHERE StatusId = 1 AND DateLockedUntil <= @DateNow
を実行し、我々はすぐに
CREATE NONCLUSTERED INDEX [IX_LocalMessage_ProcessingLocked]
ON [QP].[LocalMessage] ([DateLockedUntil] ASC)
WHERE ([StatusId] = (1))
しかし、一見した後に実行するには、このアップデートのインデックスを作成したストアドプロシージャを持っています使用されている実行計画では、この索引を使用しておらず、代わりにクラスター索引スキャンを使用しています。これは、少なくとも2秒以下で実行されるこのステートメントを必要としますが、12-15秒に達する時刻が表示されます。私はなぜそれがインデックスを無視しているのか理解したいと思います。
私は2つの理由を考えることができます。 1.ストアプロシージャは既にコンパイルされており、プランは格納されています(RECOMPILEを使用してテストできます)。2. SQL Serverは、そのインデックスを使用するとPKを使用するのと同じ時間がかかることがわかります。たぶんあなたは、そのインデックスに必要なフィールドを含めることができます – hardkoded
質問:1)どのバージョンのSQL Server? 2)更新計画の実行計画の見積もりは何行ですか? 3)テーブルには何行ありますか? – RBarryYoung