sql >> Databasteknik >  >> RDS >> Oracle

Ska jag partitionera/underpartitionera min tabell?

Du kan försöka på det här sättet:använd INTERVAL för att tala om för oracle att skapa automatiska partitioner. Du måste definiera kolumn (nummer eller datum) och ett intervall (i mitt exempel 1 månad). Oracle kommer att lägga in alla rader i samma partition i samma intervall (i det här fallet i samma månad). Om partitionen inte finns skapas.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date)                              
interval (numtoyminterval(1,'MONTH'))(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

Detsamma kan också göras med typkolumn. Mer information:http://www.oracle.com/ technetwork/articles/sql/11g-partitioning-084209.html .

Varje partition kan underpartitioneras med MALL-tangenten.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION types1 VALUES (1, 2) TABLESPACE tbs_1,
    SUBPARTITION types2 VALUES (3, 4) TABLESPACE tbs_1
)                          
(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

I det här fallet kan du inte skapa en automatisk underpartition, om en ny typ kommer att läggas till måste du köra en ändringstabell. Här finns mer information; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .

I ditt exempel:

create table prova_log(
       id_dispositive    number,
       type       number,
       date_verification    date,
       status  number
)
partition by range (date_verification) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION type1 VALUES (1),
    SUBPARTITION type2 VALUES (2),
    SUBPARTITION type3 VALUES (3),
    SUBPARTITION type4 VALUES (4)
)                          
(
   partition p0816 values less than (to_date('01/09/2016','dd/mm/yyyy'))
);

Om du försöker infoga:

insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);

du kommer att se 2 partitioner på ditt bord.

Nu har jag testat det!




  1. Mysql count prestanda på mycket stora bord

  2. Att ställa in Play 2.4.0 med Postgres och HikariCP ger konfigurationsfel

  3. hur man söker efter exakt sträng i mysql

  4. För stor POST-data. Minska data eller öka post_max_size