end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

oracle database 12c の range パーティショニングを試す

随分、以前に、postgresやmysql の partitioning は試していましたが、 今回は、oracle の partitioning 。

oracle の パーティショニング方式には、1)レンジ、2)ハッシュ、3)リスト 4)その他... がありますが、 私がmysqlでも使用していたレンジパーティショニングを試します。

私のユースケースとしては、見積書にある明細行を登録する見積明細テーブルへ適用していました。

よく聞く間違い

  • 既に存在するテーブルも「alter table ~ modify」で後からパーティショニングできます
  • パーティショニングは、DB内部のテーブルを分割しますので、アプリケーションが呼ぶSQLは変更不要です

事前準備 - 非パーティショニング テーブルの作成

create table TEST_TBL_4 (
num_1         NUMBER(10),
num_2         NUMBER(10),
str_1         VARCHAR2(10),
str_2         VARCHAR2(10),
PRIMARY KEY (num_1)
);

CREATE INDEX TEST_TBL_4_STR_1 ON TEST_TBL_4(str_1);

レンジ パーティショニング化

alter table TEST_TBL_4 modify
  partition by range(num_1) (
    partition tbl_4_part__500000 values less than ( 500000),
    partition tbl_4_part_1000000 values less than (1000000),
    partition tbl_4_part_1500000 values less than (1500000),
    partition tbl_4_part_2000000 values less than (2000000),
    partition tbl_4_part_2500000 values less than (2500000),
    partition tbl_4_part_3000000 values less than (3000000),
    partition tbl_4_part_3500000 values less than (3500000),
    partition tbl_4_part_4000000 values less than (4000000),
    partition tbl_4_part_4500000 values less than (4500000),
    partition tbl_4_part_5000000 values less than (5000000),
    partition tbl_4_part_5500000 values less than (5500000)
  ) online;

レンジ パーティショニング化の確認

SQL> column table_name      format a20
     column PARTITION_NAME  format a20
     SELECT TABLE_NAME,PARTITION_NAME
     FROM   USER_TAB_PARTITIONS
     where table_name='TEST_TBL_4';

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
TEST_TBL_4           TBL_4_PART__500000
TEST_TBL_4           TBL_4_PART_1000000
TEST_TBL_4           TBL_4_PART_1500000
TEST_TBL_4           TBL_4_PART_2000000
TEST_TBL_4           TBL_4_PART_2500000
TEST_TBL_4           TBL_4_PART_3000000
TEST_TBL_4           TBL_4_PART_3500000
TEST_TBL_4           TBL_4_PART_4000000
TEST_TBL_4           TBL_4_PART_4500000
TEST_TBL_4           TBL_4_PART_5000000
TEST_TBL_4           TBL_4_PART_5500000

パーティショニング化の速度効果

は、自身で「explain plan for ~」や、 アプリケーションからのDBテーブル参照で、ご確認ください。

テーブルを分割した影響もあり、 単純な「explain plan for ~」だけでは速度効果を確認できないかと思いますので