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

3

我对索引维护还很陌生。我发现我们大多数的索引都是使用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语句。

问题 -

  1. drop_existing=on是什么意思?它只是删除现有的索引并重新创建它,还是在不需要重建索引的情况下(例如将列包含在非聚集索引中)可以节省重建索引(重新索引数据等)的时间?
  2. create index with drop_existing = onalter index之间有什么区别?我什么时候必须使用其中一个?
  3. 修改索引时,索引是否变为不可用状态?是否有办法将不可用时间最小化?
1个回答

5

drop_existing=on是什么意思?它只是删除现有的索引并重新创建它,还是节省了重建索引(重新索引数据等)的时间?

DROP_EXISTING子句告诉SQL Server正在删除现有的聚集索引,但会添加一个新的聚集索引代替它,让SQL Server推迟更新非聚集索引,直到新的聚集索引就位。

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

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

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

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

当对索引进行修改时,索引是否变为不可用状态?有没有办法将不可用时间最小化?

当使用DROP EXISTING子句时,索引将在大多数时间内可用...索引最后需要一个独占锁,但此阻塞时间非常短。

参考资料:
https://dev59.com/P53ha4cB1Zd3GeqPR0Zo#41096665
https://msdn.microsoft.com/en-us/library/ms188783.aspx
http://sqlmag.com/database-high-availability/use-create-indexs-dropexisting-clause-when-recreating-clustered-index


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接