切换分区表示索引需要包含分区列

时间:2014-12-12 13:30:10

标签: sql-server database-partitioning

  

'ALTER TABLE SWITCH'语句失败。表'dbo.test'是   在索引'IX_test'未分区的情况下进行分区。“

当我运行switch partition时,我收到此错误。要解决此错误,IX_test索引应在其定义中包含分区列。但是,如果我们在索引中包含分区列,这会降低性能吗?

示例:我们有表X,它在列A,B和C上有索引,它在列D上分区。我们再创建一个名为X1的表,其模式与X相同。我们将使用它作为分区开关它们之间的操作(X和X1)。

由于索引不在D列(它在A,B,C上),我得到上面的错误。 将分区列(即D)添加到索引中是否合适?如下所示?

CREATE NONCLUSTERED INDEX IX_T_MSB_Pseudo ON dbo.T_MSB_Pseudo
(
    A, B, C
)
INCLUDE
(
    D
)
ON PRIMARY

这会降低性能吗?还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

SWITCHING分区要求切换表在各方面都非常相同 所以要这样做。

分区切换它可以交换几个指针来交换数据,而无需任何实际处理或检查或数据移动。所以有规则。

来自MSDN "Transferring Data Efficiently by Using Partition Switching",2个关键点

  

分区必须位于同一列

     

必须定义非聚簇索引且必须相同