3

レコードの行先を常に把握できるように、テーブルを分割したいと考えています。たとえば、電話番号リストと 10 個のパーティションがある場合、各電話番号の下 1 桁に基づいてガイドするようにガイドしたいと考えています。

私はOracle 11gR2を使用していることに言及する価値があります

PARTITION BY LISTただし、それは許可されていないようです。

CREATE TABLE t (
    tel INT NOT NULL
)
PARTITION BY LIST ( MOD (tel,10) )
      (PARTITION MSISDN0 VALUES (0),
       PARTITION MSISDN1 VALUES (1),
       PARTITION MSISDN2 VALUES (2),
       PARTITION MSISDN3 VALUES (3),
       PARTITION MSISDN4 VALUES (4),
       PARTITION MSISDN5 VALUES (5),
       PARTITION MSISDN6 VALUES (6),
       PARTITION MSISDN7 VALUES (7),
       PARTITION MSISDN8 VALUES (8),
       PARTITION MSISDN9 VALUES (9));

Erro de SQL: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"

LIST PARTITIONS関数を受け入れないようです。それでも私は仮想列で管理しました:

CREATE TABLE t (
    tel INT NOT NULL
    , tel_p GENERATED ALWAYS AS ( mod (tel,10) )
)
PARTITION BY LIST ( tel_p )
      (PARTITION MSISDN0 VALUES (0),
       PARTITION MSISDN1 VALUES (1),
       PARTITION MSISDN2 VALUES (2),
       PARTITION MSISDN3 VALUES (3),
       PARTITION MSISDN4 VALUES (4),
       PARTITION MSISDN5 VALUES (5),
       PARTITION MSISDN6 VALUES (6),
       PARTITION MSISDN7 VALUES (7),
       PARTITION MSISDN8 VALUES (8),
       PARTITION MSISDN9 VALUES (9));

かなり不安定に感じますが...それを行う「適切な方法」はありますか?

4

1 に答える 1

3

あなたのやり方は正しいと思います。その機能については、Oracle のドキュメントで具体的に読むことができます。

仮想列ベースのパーティション化

以前のリリースのOracle Databaseでは、表にパーティション化キーが物理的に存在する場合にのみ、表をパーティション化できました。Oracle Database 11g では、仮想列によってその制限が取り除かれ、表の 1 つ以上の既存の列を使用して、式によってパーティション化キーを定義できるようになります。式はメタデータとしてのみ保存されます。

Oracle Partitioning が拡張され、仮想列でパーティション化戦略を定義できるようになりました。たとえば、10 桁のアカウント ID には、先頭の 3 桁としてアカウント ブランチ情報を含めることができます。仮想列ベースのパーティショニングの拡張により、ACCOUNT_ID 列を含む ACCOUNTS テーブルを、ACCOUNT_ID 列の最初の 3 桁から派生した仮想 (派生) 列 ACCOUNT_BRANCH で拡張できます。これがこのテーブルのパーティション化キーになります。

仮想列ベースのパーティション化は、間隔および間隔-* 複合パーティション化を含むすべての基本的なパーティション化戦略でサポートされています。

出典: Oracle ドキュメント - パーティショニング

于 2013-10-25T17:16:51.117 に答える