Oracle
 sql >> база данни >  >> RDS >> Oracle

Трябва ли да разделя/подразделя таблицата си?

Можете да опитате по този начин:използвайте INTERVAL, за да кажете на oracle да създава автоматични дялове. Трябва да определите колона (номер или дата) и интервал (в моя пример 1 месец). Oracle ще постави в същия дял всички редове в същия интервал (в този случай в същия месец). Ако дялът не съществува, ще бъде създаден.

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

Същото може да се направи и с колона тип. Повече информация:http://www.oracle.com/ technetwork/articles/sql/11g-partitioning-084209.html .

Всеки дял може да бъде подразделен с помощта на ключ TEMPLATE.

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

В този случай не можете да създадете автоматичен подраздел, ако ще бъде добавен нов тип, трябва да изпълните команда за промяна на таблица. Ето повече информация; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .

Във вашия пример:

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

Ако се опитате да вмъкнете:

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

ще видите 2 дяла на вашата маса.

Сега го тествах!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. select distinct(date) връща една и съща дата няколко пъти

  2. Материализиран изглед със спусък?

  3. Функцията CURRENT_TIMESTAMP на Oracle наистина ли е функция?

  4. Резервиране на Oracle RAC N+1

  5. Oracle генерира списък с дати от IW седмица