'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
这会降低性能吗?还有其他方法可以解决这个问题吗?
答案 0 :(得分:3)
SWITCHING分区要求切换表在各方面都非常相同 所以要这样做。
分区切换它可以交换几个指针来交换数据,而无需任何实际处理或检查或数据移动。所以有规则。
来自MSDN "Transferring Data Efficiently by Using Partition Switching",2个关键点
分区必须位于同一列
必须定义非聚簇索引且必须相同