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