随分、以前に、postgresやmysql の partitioning は試していましたが、 今回は、oracle の partitioning 。
- mysql 5.1 のパーティショニングを試す - end0tknr's kipple - web写経開発
- postgresで巨大レコード数のtableを扱うなら、パーティショニング - end0tknr's kipple - web写経開発
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 ~」だけでは速度効果を確認できないかと思いますので