首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server中的脱机索引重建和联机索引重建有什么区别?

SQL Server中的脱机索引重建和联机索引重建有什么区别?
EN

Stack Overflow用户
提问于 2011-06-11 00:52:30
回答 3查看 120.1K关注 0票数 62

重建索引时,有一个用于ONLINE=OFFONLINE=ON的选项。我知道当ONLINE模式打开时,它会复制索引,将新的查询切换到使用它,然后重新构建原始索引,使用版本控制跟踪对两者的更改(如果我错了,请纠正我)。

但是SQL在脱机模式下做什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-11 02:21:25

在联机模式下,新的索引被构建,而旧的索引可以被读和写访问。对旧索引的任何更新也将应用于新索引。反物质列用于跟踪更新和重建之间可能的冲突(即,删除尚未复制的行)。参见Online Index Operations。该过程完成后,该表将被锁定一段时间,新索引将替换旧索引。如果索引包含LOB列,则SQL Server 2005/2008/R2不支持联机操作。

在脱机模式下,对于任何读或写操作,表都被预先锁定,然后在持有表上的锁的同时,从旧索引构建新索引。在重新生成索引时,不允许对表执行读或写操作。只有当操作完成时,表上的锁才会被释放,并且再次允许读取和写入。

请注意,在SQL Server2012中,取消了对LOB的限制,请参阅Online Index Operations for indexes containing LOB columns

票数 79
EN

Stack Overflow用户

发布于 2017-03-15 15:38:22

主要区别是:

1)离线索引重建比在线重建更快。

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

3)通过SQL Server联机索引重建获得的SQL Server锁。

  • 此架构修改锁会阻止对表的所有其它并发访问,但在删除旧索引并更新统计信息时,它只会保持很短的一段时间。
票数 11
EN

Stack Overflow用户

发布于 2011-06-11 01:37:22

当涉及到锁定表时,联机索引重建的侵入性较小。离线重建会导致表的大量锁定,这可能会对试图在重建发生时访问数据库的事物造成严重的阻塞问题。

在脱机重新生成期间,表锁应用于索引操作期间。创建、重新生成或删除聚集索引、空间索引或XML索引,或者重新生成或删除非聚集索引的脱机索引操作,将获取表的架构修改(Sch-M)锁。这将阻止所有用户在操作期间访问基础表。创建非聚集索引的脱机索引操作将获取表的共享(S)锁。这将阻止对基础表的更新,但允许执行读取操作,如SELECT语句。

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6309614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档