sql >> データベース >  >> RDS >> Oracle

IDによるOracleパーティションとDATEによるサブパーティション(間隔あり)

    RANGE INTERVALを作成できます 日付のパーティションを作成してから、LIST またはRANGE その上のサブパーティション。次のようになります:

    CREATE TABLE MY_PART_TABLE
    (
      CUSTOMER_ID                      NUMBER             NOT NULL,
      THE_DATE                 TIMESTAMP(0) NOT NULL,
      OTHER_COLUMNS NUMBER
    )
    PARTITION BY RANGE (THE_DATE) INTERVAL (INTERVAL '1' MONTH)
        SUBPARTITION BY RANGE (CUSTOMER_ID)
            SUBPARTITION TEMPLATE (
            SUBPARTITION CUSTOMER_GROUP_1 VALUES LESS THAN (10),
            SUBPARTITION CUSTOMER_GROUP_2 VALUES LESS THAN (20),
            SUBPARTITION CUSTOMER_GROUP_3 VALUES LESS THAN (30),
            SUBPARTITION CUSTOMER_GROUP_4 VALUES LESS THAN (40),
            SUBPARTITION CUSTOMER_GROUP_5 VALUES LESS THAN (MAXVALUE)
            )
    (PARTITION VALUES LESS THAN ( TIMESTAMP '2015-01-01 00:00:00') );
    
    
    
    CREATE TABLE MY_PART_TABLE
    (
      CUSTOMER_ID                      NUMBER             NOT NULL,
      THE_DATE                 TIMESTAMP(0) NOT NULL,
      OTHER_COLUMNS NUMBER
    )
    PARTITION BY RANGE (THE_DATE) INTERVAL (INTERVAL '1' MONTH)
        SUBPARTITION BY LIST (CUSTOMER_ID)
            SUBPARTITION TEMPLATE (
            SUBPARTITION CUSTOMER_1 VALUES (1),
            SUBPARTITION CUSTOMER_2 VALUES (2),
            SUBPARTITION CUSTOMER_3_to_6 VALUES (3,4,5,6),
            SUBPARTITION CUSTOMER_7 VALUES (7)
            )
    (PARTITION VALUES LESS THAN ( TIMESTAMP '2015-01-01 00:00:00') );
    

    2番目のソリューションでは、顧客の番号(つまり、ID)が固定されていることに注意してください。新しい顧客を獲得した場合は、テーブルを変更し、それに応じてサブパーティションテンプレートを変更する必要があります。

    毎月のパーティションは、新しい値が挿入または更新されるたびにOracleによって自動的に作成されます。




    1. 売り手と買い手を一致させるSQLクエリ

    2. Oracleの日付にAD/BCインジケーターを追加する方法

    3. 多くのJOINを使用してクエリのパフォーマンスを向上させる方法

    4. Django + MySQL-不明なエンコーディング:utf8mb4