关系数据库管理系统:SQL Server 2005 标准版
我有一张有 10 亿行的表。
我想要做的是使用分区函数对其进行垂直分区,并在表上应用带有函数的分区方案,比如将BigTable
列ID
作为主键列名。
假设我有 2 个文件组,
- FG1:分区 1
BigTable
存储在此处 - FG2:分区 2,在这里。
FG1 包含的 ID 值介于 1 到 500 万之间。FG2 包含的 ID 值介于 500 万 + 1 之间,依此类推。
如果我重建索引BigTable
,当 SQL Server 为 ID 介于 1 到 5 百万之间的索引重建索引时,这会影响访问BigTable
ID 大于 5 百万 + 1 的用户吗?
答案1
如果你要重建全部的使用 OFFLINE(默认)重建 BigTable 上的索引,则整个表将在重建期间处于离线状态以供查询。您还可以选择重建全部的索引使用在线重建,这将使整个表在重建的几乎整个持续时间内(在操作的开始和结束时有两个相对较短的阶段,并非完全在线)保持可查询(读取和写入)(还有一些其他潜在的副作用,例如使用更多磁盘空间,花费更长时间等)。有关在线索引操作的更多信息,请参阅它们是如何工作的和执行指南。
如果您只想重建 BigTable 的一个分区,则可以使用与重建整个表非常相似的选项,但并发影响仅限于您正在重建的分区。单分区重建存在一些限制,例如您无法在线执行单分区重建(即,如果您决定重建单个分区,则必须离线执行,这意味着在重建期间无法访问给定分区的数据)。有关此处选项的详细信息,请参阅ALTER INDEX 语句文档。
至于具体回答 SQL 引擎何时/如何确定在重建操作期间应重建/访问给定索引的哪些部分(是否分区),这实际上并不重要 - 您在并发方面拥有的选项是:
- 重建整个索引(或所有分区)
- 重建单个分区
如果您指定整个索引/所有分区,您将得到上面第一段中概述的并发语义。如果您指定单个分区,则并发语义将如第二段中概述的那样。