我有一个表大量数据,在该表上有三个索引
1。聚合索引(包含三个字段)
2。唯一非聚合索引(包含两个字段)
3。非聚合索引(一个字段)
该表已经被分区,而且聚合索引中包含分区列,但是其他索引都不包含现在我希望对该表进行switch out的操作,该如何进行。PS:不能改表结构,如果需要更改必须还原索引分区
1。聚合索引(包含三个字段)
2。唯一非聚合索引(包含两个字段)
3。非聚合索引(一个字段)
该表已经被分区,而且聚合索引中包含分区列,但是其他索引都不包含现在我希望对该表进行switch out的操作,该如何进行。PS:不能改表结构,如果需要更改必须还原索引分区
用这个语句可以将某个分区的数据都转到指定的地方(比如一个特定的表),然后该分区的结构还是保留
确实可以用这个语句来切换分区我现在就是这样做的:
1.删除那个唯一索引
2.做ALTER TABLE ... SWITCH PARTITION x TO ...
将数据转出去,并删除
3.重建那个唯一索引(因为如果直接作步骤2那么会在唯一索引这里报错)因为我现在有大量数据,所以索引删除和重建会很耗时
我希望能够不用删除操作就可以执行步骤2
在建立唯一索引时,如果唯一索引不包含 分区字段,不会报错吗? 你是怎么建成这个唯一索引的呀。我怎么在建不包含分区字段的唯一索引时,会报错呀,这里的wcDate是分区列,wcT表已经有一个聚集索引:create unique index uni_wcT_v on wcT(uni_v1,uni_v2)消息 1908,级别 16,状态 1,第 1 行
列 'wcDate' 是索引 'uni_wcT_v' 的分区依据列。唯一索引的分区依据列必须是索引键的子集。
但每次进行分区操作时,你说必须要删除这个唯一索引,上面说到分区操作会导致不包含分区列的唯一索引,失效,所以必须要重建,当数据量大时,重建索引时间很长,无法通过这个索引来访问数据的时间也会很长,大大降低数据的可访问性。简单来说,就是没办法,不管是在sql server,还是oracle,都是没办法,要想不这样,只能是加上分区列。