Quiero usar un particionamiento de lista de rango compuesto en Oracle.

El uso de un rango es bastante claro para mí. La parte complicada está en la partición de la lista y aquí es donde tengo la pregunta.

Supongamos que tenemos una columna con continentes. Quiero que la partición de la lista incluya todos los continentes que NO son Europa. El problema aquí es que no puedo crear una partición de lista que incluya todos los demás continentes excepto Europa, ya que en algún momento podría agregar nuevos continentes.

¿Es posible algo así?

0
Stephan 17 ene. 2017 a las 11:12

1 respuesta

La mejor respuesta

De la documentación de Oracle

Con la partición de listas, no hay un sentido aparente de orden entre particiones. También puede especificar una partición predeterminada en qué filas que no se asignan a ninguna otra partición se asignan.

Según lo anterior, puede crear dos particiones, una para Europa y otra para otras, y establecer la última también como predeterminada. De esta manera, puede tener sus datos de Europa en una partición y cualquier cosa que no sea Europa pasa a la partición predeterminada.

Aquí hay un ejemplo

CREATE TABLE sample_regional_sales
      (deptno number, item_no varchar2(20),
       txn_date date, txn_amount number, state varchar2(2))
  PARTITION BY RANGE (txn_date)
    SUBPARTITION BY LIST (state)
      (PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY'))
          TABLESPACE tbs_1
         (SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
          SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),
          SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),
          SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),
          SUBPARTITION q1_others VALUES (DEFAULT) TABLESPACE tbs_4
         ),
       PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('1-JUL-1999','DD-MON-YYYY'))
          TABLESPACE tbs_2
         (SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
          SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),
          SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),
          SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),
          SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),
          SUBPARTITION q2_1999_southcentral VALUES ('OK', 'TX')
         ),
       PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY'))
          TABLESPACE tbs_3
         (SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
          SUBPARTITION q3_1999_southwest VALUES ('AZ', 'UT', 'NM'),
          SUBPARTITION q3_others VALUES (DEFAULT) TABLESPACE tbs_4
         ),
       PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))
          TABLESPACE tbs_4
      );

Fuente

2
Vijayakumar Udupa 17 ene. 2017 a las 11:29
Vijayakumar Udupa, acabo de llegar también junto con el valor PREDETERMINADO. Seguramente lo intentaré e informaré mis resultados. Gracias !
 – 
Stephan
17 ene. 2017 a las 12:44
¿Tuviste suerte con la prueba?
 – 
Vijayakumar Udupa
18 ene. 2017 a las 12:54
Sí, funcionó. Sin embargo, no obtengo ningún aumento de rendimiento en mis consultas en comparación con la tabla anterior, pero este es otro tema. Actualmente, estoy enfrentando un nuevo problema con los índices de partición en las subparticiones. Gracias por su respuesta.
 – 
Stephan
18 ene. 2017 a las 13:48
1
No creo que haya ninguna disminución en el rendimiento debido a la cláusula predeterminada. Dado que Oracle conoce la base del particionamiento, siempre que sus consultas proporcionen datos que son clave para el particionamiento, debería poder obtener resultados como antes. El factor principal que contribuye en este caso serían sus índices en lugar de la partición de la lista basada en el valor PREDETERMINADO de la partición.
 – 
Vijayakumar Udupa
18 ene. 2017 a las 13:53
1
Siempre que su consulta tenga una cláusula como 'continente = [nombre del continente]', el oráculo determinará qué partición debe elegir. De hecho, la creación de un índice en la combinación de su (clave de rango, clave de lista) mejorará el rendimiento de la consulta. Nota: la mera partición no ayudará directamente con el rendimiento, sino que ayuda a administrar los datos con facilidad. Además, Oracle tiene una función en la que puede ejecutar una consulta directamente en una partición (si puede llegar al nombre de la partición y convertirlo en parte de su consulta de alguna manera). Esto proporciona muchos beneficios de rendimiento, como he visto en el pasado.
 – 
Vijayakumar Udupa
18 ene. 2017 a las 14:09