我是索引维护新手。我看到我们的大多数索引都使用create index
和drop_existing = on
进行了修改。例如:
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
声明。
问题 -
drop_existing=on
做什么?如果索引存在并且重新创建它,它是否只是丢弃索引,或者如果修改不真正需要重建索引,那么它是否可以节省重建索引(重新索引数据等)。 (例如,包括非聚集索引中的列)?create index with drop_existing = on
和alter index
之间有什么区别?我什么时候必须使用其中一种?答案 0 :(得分:2)
drop_existing = on做什么?它是否只是删除了索引(如果存在)并重新创建它,或者它是否在重建索引时保存(重新索引数据等)
DROP_EXISTING
子句告诉SQL Server现有的聚簇索引被删除但是会在其位置添加一个新的聚合索引,让SQL Server推迟更新非聚簇索引,直到新的聚簇索引到位为止< / p>
如果修改不是真的需要重建索引,那么它是否可以节省重建索引(重新索引数据等)。 (例如,包括非聚集索引中的列)?
如果聚集索引键没有改变并且定义为UNIQUE
,SQL Server根本不会重建非聚簇索引create index with drop_existing = on和alter index有什么区别?我什么时候必须使用其中一种?
alter index用于Rebuild / Reorg index ..我没有看到与Create的任何比较
当索引的修改正在进行时,索引是否变得不可用,是否有办法将不可用时间保持在最低限度?
当你使用DROP EXISTING
子句时,索引将在大多数时间可用.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