web-dev-qa-db-ja.com

本当に忙しいテーブルにインデックスを作成する

たくさんのinsert\select毎回(100台のマシンが毎秒挿入/更新するように)。

1秒でもロックできないテーブルにインデックスを作成する最良の方法は何ですか?

インデックスを作成すると、リクエストがロックされて、実行できなくなります。

100万行以上の大きなテーブルです。

11
Racer SQL

CREATE INDEX WITH (NOLOCK)などのオプションはありません(クエリのNOLOCKでさえロックがかかりますが、ヒントがない場合よりも少なくなります)。

あなたがやろうとしているのはWITH (ONLINE = ON)です。これは、操作の最初と最後にロックを取得します(両方とも、テーブルに関連するプランの再コンパイルに関連しています-参照 Paulによるこのブログ投稿)詳細についてはランダル )。

これにより、アプリケーションでのインデックス作成の影響が大幅に軽減されますが、その影響を完全に排除する実用的な方法はありません。また、この機能は無料ではありません。EnterpriseEditionが必要です。

12
Aaron Bertrand