sql >> Database teknologi >  >> RDS >> Oracle

Oracle-partition efter ID og underpartition efter DATO med interval

Du kan lave et RANGE INTERVAL partition på dato og derefter LIST eller RANGE underopdeling på den. Ville være sådan her:

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') );

Bemærk, for den anden løsning er antallet (dvs. ID'er) på kunden fast. Hvis du får nye kunder, skal du ændre tabellen og ændre SUBPARTITIONSSKABONEN i overensstemmelse hermed.

Månedlige partitioner oprettes automatisk af Oracle, hver gang nye værdier indsættes eller opdateres.




  1. Jooq LocalDateTime-felter bruger systemets tidszone i stedet for sessionens tidszone

  2. Er join insert/update på MySQL en atomoperation?

  3. GROUP BY i Postgres - ingen lighed for JSON-datatypen?

  4. Kan MySql indlejret SP være en flaskehals?