重建索引时,有一个ONLINE = OFF和ONLINE = ON的选项。我知道当联机模式打开时,它会复制索引,切换新查询以使用它,然后重建原始索引,使用版本控制跟踪更改(如果我错了,请更正我)。
但是在脱机模式下SQL做了什么?
答案 0 :(得分:62)
在ONLINE模式下,构建新索引,同时可以读取和写入旧索引。旧索引的任何更新也将应用于新索引。反物质列用于跟踪更新和重建之间可能存在的冲突(即删除尚未复制的行)。见Online Index Operations。当进程完成时,表会被锁定一段时间,新索引将替换旧索引。如果索引包含LOB列,则SQL Server 2005/2008 / R2中不支持ONLINE操作。
在OFFLINE模式下,表被预先锁定以进行任何读取或写入,然后新索引从旧索引构建,同时在表上保持锁定。在重建索引时,表上不允许读取或写入操作。只有在操作完成后,才会释放对表的锁定,并允许再次读取和写入。
请注意,在SQL Server 2012中解除了对LOB的限制,请参阅Online Index Operations for indexes containing LOB columns。
答案 1 :(得分:6)
在锁定表时,联机索引重建不那么具有侵入性。脱机重建会导致表的严重锁定,这会导致在重建过程中尝试访问数据库的事件出现严重的阻塞问题。
"表锁定在索引操作期间[在脱机重建期间]应用。创建,重建或删除集群,空间或XML索引或重建或删除非集群索引的脱机索引操作会在表上获取模式修改(Sch-M)锁定。这可以防止所有用户在操作期间访问基础表。创建非聚集索引的脱机索引操作会获取表上的共享(S)锁。这可以防止更新基础表,但允许读取操作,例如SELECT语句。"
http://msdn.microsoft.com/en-us/library/ms188388(v=sql.110).aspx
此外,在线索引重建仅是企业(或开发人员)版本的功能。
答案 2 :(得分:4)
主要区别是:
1)OFFLINE索引重建比在线重建更快。
2)SQL Server联机索引重建期间需要额外的磁盘空间。
3)使用SQL Server联机索引重建获取的SQL Server锁。