重建分区表索引如何影响表访问?

重建分区表索引如何影响表访问?

关系数据库管理系统:SQL Server 2005 标准版

我有一张有 10 亿行的表。

我想要做的是使用分区函数对其进行垂直分区,并在表上应用带有函数的分区方案,比如将BigTableID作为主键列名。

假设我有 2 个文件组,

  • FG1:分区 1BigTable存储在此处
  • FG2:分区 2,在这里。

FG1 包含的 ID 值介于 1 到 500 万之间。FG2 包含的 ID 值介于 500 万 + 1 之间,依此类推。

如果我重建索引BigTable,当 SQL Server 为 ID 介于 1 到 5 百万之间的索引重建索引时,这会影响访问BigTableID 大于 5 百万 + 1 的用户吗?

答案1

如果你要重建全部的使用 OFFLINE(默认)重建 BigTable 上的索引,则整个表将在重建期间处于离线状态以供查询。您还可以选择重建全部的索引使用在线重建,这将使整个表在重建的几乎整个持续时间内(在操作的开始和结束时有两个相对较短的阶段,并非完全在线)保持可查询(读取和写入)(还有一些其他潜在的副作用,例如使用更多磁盘空间,花费更长时间等)。有关在线索引操作的更多信息,请参阅它们是如何工作的执行指南

如果您只想重建 BigTable 的一个分区,则可以使用与重建整个表非常相似的选项,但并发影响仅限于您正在重建的分区。单分区重建存在一些限制,例如您无法在线执行单分区重建(即,如果您决定重建单个分区,则必须离线执行,这意味着在重建期间无法访问给定分区的数据)。有关此处选项的详细信息,请参阅ALTER INDEX 语句文档

至于具体回答 SQL 引擎何时/如何确定在重建操作期间应重建/访问给定索引的哪些部分(是否分区),这实际上并不重要 - 您在并发方面拥有的选项是:

  • 重建整个索引(或所有分区)
  • 重建单个分区

如果您指定整个索引/所有分区,您将得到上面第一段中概述的并发语义。如果您指定单个分区,则并发语义将如第二段中概述的那样。

相关内容