web-dev-qa-db-ja.com

online = onオプションを使用して非クラスター化インデックスを削除できないのはなぜですか

DROP INDEX [IX_MYINDEX] ON [dbo].[myTable] WITH ( ONLINE = ON )などのオンラインオプションを使用して非クラスター化インデックスを削除しようとすると、次のエラーメッセージが表示されます。

Msg 3745, Level 16, State 1, Line 16 
Only a clustered index can be dropped online.

SQL Serverのドキュメントには、次のように明記されています。

ONLINEオプションは、クラスター化インデックスを削除する場合にのみ指定できます。

https://msdn.Microsoft.com/en-us/library/ms176118.aspx

しかし、なぜこれが事実であるか誰かが私に説明してもらえますか?私の経験では、クラスタ化インデックスはほとんどの場合主キーでもあるため、クラスタ化インデックスよりも非クラスタ化インデックスを削除する可能性がはるかに高くなります。

7
BateTech

なぜなら、NCIの削除は、すでにオンラインで行われているためです。メタデータのみの操作です。データの削除すらありません。削除されたインデックス行セットは単に割り当て解除されます。 truncateと同じ操作です。

一方、クラスター化インデックスの削除は、再構築を意味し、データのサイズ操作であるため、オンラインで代替することは理にかなっています。

12
Remus Rusanu