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

Sql server 修改现有索引:使用drop_existing=on vs alter index语句创建索引,sql-server,tsql,Sql Server,Tsql,我不熟悉索引维护。我看到我们的大多数索引都是使用create index和drop\u existing=on修改的。例如: create nonclustered index ixn_SomeTable__SomeIndexName_ic1 on dbo.SomeTable ( Column1 ) include ( Column2, IncludeThisNewColumn3 ) with ( sort_in_t

我不熟悉索引维护。我看到我们的大多数索引都是使用
create index
drop\u 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也有
alterindex
语句

问题-

  • drop\u existing=on
    的作用是什么?如果索引存在,它是否只是删除索引并重新创建它,或者如果修改不需要重建索引,它是否在重建索引时保存(重新索引数据等)。(例如,在非聚集索引中包含列)
  • 使用drop_existing=on创建索引与使用alter index创建索引有什么区别?什么时候我必须使用其中一种
  • 当对索引进行修改时,索引是否变得不可用?是否有方法将不可用时间保持在最小
  • drop_existing=on的作用是什么?它只是删除索引(如果存在)并重新创建它,还是在重建索引时保存(重新索引数据等)

    DROP\u EXISTING
    子句告诉SQL Server正在删除现有的聚集索引,但将在其位置添加一个新的聚集索引,使SQL Server推迟更新非聚集索引,直到新的聚集索引就位

    如果修改实际上不需要重建索引,那么在重建索引(重新索引数据等)时是否会节省。(例如,在非聚集索引中包含列)

    如果聚集索引键未更改且定义为唯一,则SQL Server根本不会重新生成非聚集索引

    使用drop_existing=on创建索引和alter index之间有什么区别?什么时候我必须使用其中一种

    alter index用于重建/重新生成索引。我看不到与Create的任何比较

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

    当您使用
    DROP EXISTING
    子句时,索引将在大部分时间内可用。索引将要求在末尾使用独占锁,但这种阻塞将非常短

    参考文献: