2017-01-13 2 views
2

インデックスメンテナンスを初めて行っています。ほとんどのインデックスはcreate indexdrop_existing = onで修正されています。たとえば:既存のインデックスを変更する:drop_existing = onとalter indexステートメントを使用してインデックスを作成します。

create nonclustered index ixn_SomeTable__SomeIndexName_ic1 
on dbo.SomeTable    (Column1) 
include       (Column2, IncludeThisNewColumn3) 
with (sort_in_tempdb = on, drop_existing = on, online = on, fillfactor = 95) on [SomeFileGroup] 
go 

が、私はTSQLもalter index文を持っている参照してください。

質問 -

  1. drop_existing=onは何をしますか?存在する場合は索引を削除して再作成するか、索引の再構築が必要ない場合は索引の再構築時に保存します(データの再索引付けなど)。 (たとえば、非クラスタ化インデックスの列を含む)?
  2. create index with drop_existing = onalter indexの違いは何ですか?私は絶対にどちらか一方を使用する必要がありますか?
  3. インデックスへの変更が進行中で、使用できなくなる時間を最小限に抑える方法がある場合、インデックスは使用できなくなりますか?

答えて

2

drop_existing = onの機能は何ですか?それはちょうどそれが存在する場合は、インデックスを削除し、それを再作成するか、インデックス(インデックスの再作成データなど)

DROP_EXISTING句はSQLの既存のクラスタ化インデックスが削除されているサーバーが、そのAに伝えるの再構築に保存しないい新しいものは、新しいクラスタ化インデックスが

が、それは変更が「ドン場合(再インデックスデータをなど)インデックスの再構築に保存しない所定の位置に収まるまで、非クラスタ化インデックスを更新するSQL Serverの延期をさせる、その場所に追加されます本当にインデックスの再構築が必要です。 (たとえば、非クラスタ化インデックスの列を含む)?

SQL Serverは、クラスタ化インデックスキーが変更されない場合にすべての非クラスタ化インデックスを再構築しないであろうとDROP_EXISTINGを使用して索引を作成するとの違いは何ですかUNIQUE

として定義される=上とインデックスを変更しますか?私は絶対にどちらか一方を使用する必要がありますか?

ALTER INDEXは

がインデックスへの変更が進行中であるとき、インデックスが利用できなくなっていて、そこで作成して任意の比較が表示されない/再編成index..Iを再構築するために使用されます利用できない時間を最小限に抑える方法はありますか?

あなたがDROP EXISTING句を使用すると、time..Indexのほとんどが最後に排他ロックが必要になりますため、インデックスが利用できるようになりますが、このブロッキングが非常に短い

参考になります。
https://stackoverflow.com/a/41096665/2975396
https://msdn.microsoft.com/en-us/library/ms188783.aspx
http://sqlmag.com/database-high-availability/use-create-indexs-dropexisting-clause-when-recreating-clustered-index

関連する問題