我是索引维护的新手。我看到我们的大多数索引都是使用create index
with修改的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
声明。
问题 -
drop_existing=on
?它是否只是删除存在的索引并重新创建它,或者如果修改不需要重建索引,它是否节省重建索引(重新索引数据等)。(例如,在非聚集索引中包含一列)?create index with drop_existing = on
和 和有alter index
什么区别?我什么时候绝对必须使用其中一个?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