oracle分区交换有啥好处,【讨论】请问分区交换的底层原理是什么?

--创建分区表

CREATE TABLE TEST(X INT,Y INT)

PARTITION BY RANGE(X)

(

PARTITION PART0 VALUES LESS THAN (100),

PARTITION PART1 VALUES LESS THAN (MAXVALUE)

);

--创建索引

CREATE INDEX IDX_TEST_X ON TEST(X) LOCAL;

CREATE INDEX IDX_TEST_Y ON TEST(Y);

--创建交换堆表

CREATE TABLE TMP_TEST(X INT, Y INT);

--创建索引

CREATE INDEX IDX_TMP_TEST_X ON TMP_TEST(X);

--初始化分区表数据

BEGIN

FOR I IN 1..200 LOOP

INSERT INTO TEST VALUES(I,I-1);

END LOOP;

COMMIT;

END;

--初始化堆表数据

BEGIN

FOR I IN 1..50 LOOP

INSERT INTO TMP_TEST VALUES(I,I-1);

END LOOP;

COMMIT;

END;

--查看表的元数据

SQL> SELECT OBJECT_NAME,

2         SUBOBJECT_NAME,

3         OBJECT_ID,

4         DATA_OBJECT_ID,

5         OBJECT_TYPE,

6         STATUS

7    FROM DBA_OBJECTS

8   WHERE OBJECT_NAME IN ('TEST', 'TMP_TEST')

9   ORDER BY OBJECT_NAME;

OBJECT_NAME          SUBOBJECT_NAME        OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         STATUS

-------------------- -------------------- ---------- -------------- ------------------- -------

TEST                 PART1                     60040          60040 TABLE PARTITION     VALID

TEST                 PART0                     60039          60039 TABLE PARTITION     VALID

TEST                                                 60038                TABLE               VALID

TMP_TEST                                        60045          60045 TABLE               VALID

----索引的元数据

SQL> SELECT OBJECT_NAME,

2  SUBOBJECT_NAME,

3  OBJECT_ID,

4  DATA_OBJECT_ID,

5  OBJECT_TYPE,

6  STATUS

7  FROM DBA_OBJECTS

8  WHERE OBJECT_NAME IN ('IDX_TEST_X', 'IDX_TEST_Y','IDX_TMP_TEST_X');

OBJECT_NAME          SUBOBJECT_NAME        OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         STATUS

-------------------- -------------------- ---------- -------------- ------------------- ------

IDX_TMP_TEST_X                                 60047          60047 INDEX               VALID

IDX_TEST_Y                                     60044          60044 INDEX               VALID

IDX_TEST_X                                     60041                INDEX               VALID

IDX_TEST_X           PART0                     60042          60042 INDEX PARTITION     VALID

IDX_TEST_X           PART1                     60043          60043 INDEX PARTITION     VALID

--交换表及已有的索引

ALTER TABLE TEST EXCHANGE PARTITION PART0 WITH TABLE TMP_TEST INCLUDING INDEXES;

--查看数据已交换成功

SQL> SELECT COUNT(*) FROM TMP_TEST;

COUNT(*)

----------

99

SQL> SELECT COUNT(*) FROM TEST PARTITION(PART0);

COUNT(*)

----------

50

--查看表元数据的变化,可以得出结论exchange 只是交换的是数据段编号

SQL> SELECT OBJECT_NAME,

2         SUBOBJECT_NAME,

3         OBJECT_ID,

4         DATA_OBJECT_ID,

5         OBJECT_TYPE,

6         STATUS

7    FROM DBA_OBJECTS

8   WHERE OBJECT_NAME IN ('TEST', 'TMP_TEST')

9   ORDER BY OBJECT_NAME;

OBJECT_NAME          SUBOBJECT_NAME        OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         STATUS

-------------------- -------------------- ---------- -------------- ------------------- -------

TEST                 PART1                     60040          60040 TABLE PARTITION     VALID

TEST                 PART0                     60039          60045 TABLE PARTITION     VALID

TEST                                                  60038                    TABLE               VALID

TMP_TEST                                        60045          60039 TABLE               VALID

--查看索引元数据的变化,可以看出index的变化:交换了段编号

SQL> SELECT OBJECT_NAME,

2  SUBOBJECT_NAME,

3  OBJECT_ID,

4  DATA_OBJECT_ID,

5  OBJECT_TYPE,

6  STATUS

7  FROM DBA_OBJECTS

8  WHERE OBJECT_NAME IN ('IDX_TEST_X', 'IDX_TEST_Y','IDX_TMP_TEST_X','IDX_TMP_TEST_Y');

OBJECT_NAME          SUBOBJECT_NAME        OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         STATUS

-------------------- -------------------- ---------- -------------- ------------------- -------

IDX_TMP_TEST_X                                  60047          60042   INDEX               VALID

IDX_TEST_Y                                           60044          60044   INDEX               VALID

IDX_TEST_X                                           60041                      INDEX               VALID

IDX_TEST_X           PART0                     60042          60047 INDEX PARTITION     VALID

IDX_TEST_X           PART1                     60043          60043 INDEX PARTITION     VALID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值