修改现有索引:使用 drop_existing=on 与 alter index 语句创建索引

Hap*_*own 3 t-sql sql-server

我是索引维护的新手。我看到我们的大多数索引都是使用create indexwith修改的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
Run Code Online (Sandbox Code Playgroud)

但我看到 TSQL 也有alter index声明。

问题 -

  1. 有什么作用drop_existing=on?它是否只是删除存在的索引并重新创建它,或者如果修改不需要重建索引,它是否节省重建索引(重新索引数据等)。(例如,在非聚集索引中包含一列)?
  2. create index with drop_existing = on和 和有alter index什么区别?我什么时候绝对必须使用其中一个?
  3. 当对索引的修改正在进行时,索引是否变得不可用,是否有办法将不可用时间保持在最短?

The*_*war 5

drop_existing=on 有什么作用?它是否只是删除存在的索引并重新创建它,或者它是否节省重建索引(重新索引数据等)

DROP_EXISTING子句告诉 SQL Server 现有的聚集索引将被删除,但将在其位置添加一个新的索引,让 SQL Server 推迟更新非聚集索引,直到新的聚集索引就位

如果修改不需要重建索引,它是否可以节省重建索引(重新索引数据等)。(例如,在非聚集索引中包含一列)?

如果聚集索引键没有改变并且被定义为 UNIQUE,SQL Server 根本不会重建非聚集索引

create index with drop_existing = on 和 alter index 有什么区别?我什么时候绝对必须使用其中一个?

alter index 用于重建/重组索引..我没有看到与 Create 的任何比较

当对索引的修改正在进行时,索引是否变得不可用,是否有办法将不可用时间保持在最短?

当您使用DROP EXISTING子句时,索引将在大部分时间可用。索引将在最后需要一个排他锁,但这种阻塞会很短

参考资料:
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