SQLServer索引创建策略——引言(II)

SQLServer索引创建策略——引言(II)

--王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
--原帖地址


-分区索引 vs. 非分区索引:
分区表和索引的数据被分成多个单元,它们可以跨越数据库的多个文件组。数据被水平分割,所以一组记录映射到单个分区。当在数据上查询或更新时表或索引被看成是单个的逻辑实体。单个索引或表的所有分区必须是在同一个数据库内。

对齐的分区索引:
尽管可以从基表中单独实现已分区索引,但通常的做法是先设计一个已分区表,然后为该表创建索引。执行此操作时,SQL Server 将使用与该表相同的分区方案和分区依据列自动对索引进行分区。因此,索引的分区方式实质上与表的分区方式相同。这将使索引与表“对齐”。

索引并不需要与基表参与相同的命名分区函数。但是,索引和基表的分区函数在实质上必须相同,即:
1) 分区函数的参数具有相同的数据类型
2) 分区函数定义了相同数目的分区
3) 分区函数为分区定义了相同的边界值

如果你也在一个已分区的堆表或聚集索引上创建一个非聚集索引,而没有指定分区函数,那么非聚集索引将与分区对齐(看下面的例子)。
例子:
Create Partition Function pf (int)
as range right for values (NULL,
1,
100)



Create Partition Scheme ps
as Partition pf
TO ([PRIMARY], [FileGroup1], [FileGroup1], [FileGroup1])


Create table t (c1 int, c2 int)
on ps(c1)


Create Index idx_t on t(c1)


非对齐的分区索引:
如果在创建时指定了不同的分区方案或单独的文件组来存储索引,则 SQL Server 不会将索引与表对齐。
可以通过建立一个分区的聚集索引来将非分区表转化为分区表——这将是非对齐的索引(看下面的例子)。
例子:
Create Partition Function pf (int)
as range right for values (NULL,
1,
100)



Create Partition Scheme ps
as Partition pf
TO ([PRIMARY], [FileGroup1], [FileGroup1], [FileGroup1])


Create table t (c1 int, c2 int)


Create clustered Index idx_t on t(c1)
on ps(c1)


注意:如果有一个已分区的聚集索引(如上面的例子)且删除这个聚集索引,那么新的堆表将保留分区并且和聚集索引定义时有相同的分区架构或文件组,除非再删除聚集索引时指定MOVE TO选项。
例子:
Drop Index idx_t on t
WITH(MOVE TO new_ps(c1))

在本例中,基表移到了不同的分区架构上,非聚集索引没有移到与基表(堆)一致的新的位置。因此,即使非聚集索引先前和聚集索引是对齐的,它们也许不在和堆表对齐了。

上一篇:SQLServer索引创建策略——引言(I)

下一篇:SQLServer索引创建策略——第1部分:离线、连续、非分区


最后编辑拓狼 最后编辑于 2007-05-25 13:47:13
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。