SQL Server中的OFFLINE和ONLINE索引重build有什么区别?

重build索引时,可以selectONLINE = OFF和ONLINE = ON。 我知道,当ONLINE模式打开时,它会复制索引,切换新的查询来使用它,然后重build原始索引,使用版本跟踪更改(如果我错了,请更正)。

但是SQL在OFFLINE模式下做了什么?

在联机模式下,build立新的索引,而旧的索引可以读取和写入。 旧索引上的任何更新也将应用于新索引。 反物质列用于跟踪更新和重build之间可能的冲突(即,删除尚未被复制的行)。 请参阅联机索引操作 。 当进程完成时,表被locking一段时间,新的索引取代旧的索引。 如果索引包含LOB列,则SQL Server 2005/2008 / R2不支持ONLINE操作。

在OFFLINE模式下,对于任何读取或写入操作,都会预先locking表,然后在保留表锁的同时,从旧索引构build新索引。 正在重build索引时,在表上不允许读取或写入操作。 只有在操作完成时,才会释放表上的锁,并且再次允许读写。

请注意,在SQL Server 2012中,取消了对LOB的限制,请参阅包含LOB列的索引的联机索引操作 。

在locking表格时,在线索引重build不那么干扰。 脱机重build会导致表的大量locking,这可能会导致在重build发生时尝试访问数据库的事件发生重大阻塞问题。

“表锁在索引操作期间(在脱机重build期间)应用。创build,重build或删除集群,空间或XML索引,或者重build或删除非集群索引的脱机索引操作获取一个Schema修改(Sch-M)locking表,这将阻止所有用户在操作期间访问基础表。创build非聚簇索引的脱机索引操作会在表上获取共享(S)锁,从而防止更新到底层表,但允许读取操作,如SELECT语句。“

http://msdn.microsoft.com/en-us/library/ms188388(v=sql.110).aspx

此外,在线索引重build是企业(或开发人员)版本的唯一function。

主要区别是:

1)离线索引重build比在线重build要快。

2)SQL Server联机索引重build期间需要额外的磁盘空间。

3)通过SQL Server联机索引重build获取SQL Server锁。

  • 此架构修改锁可阻止对该表的所有其他并发访问,但只保留很短的时间,同时删除旧索引并更新统计信息。