Use Partitioned Indexes

1. Documentación en Tahiti -> Oracle Database, 11g Release 2 (11.2) -> Masters Book List -> Performance Tuning Guide -> 14 Using Indexes and Clusters

2. Ya hemos visto varios ejercicios de índices particionades y las directrices generales que recomiendan uno u otro tipo de partición en los siguientes objetivos dentro de la sección de «Data Warehouse Management»:

[ ] Administer partitioned tables and indexes using appropriate methods and keys
[ ] Perform partition maintenance operations
[ ] Maintain indexes on a partitioned table

3. Hay un ejemplo de índices particionados que nos puede ayudar cuando tenemos contención en la BD debido a un índice que crece de forma monotona. Estas inserciones pueden ocurrir siempre en el lado derecho del índice, que es lo que provoca la contención. En estos casos, un índice global particionado de tipo Hash nos puede ayudar (Global Hash Partitioned Index). Se recomienda utilizar siempre un número de particiones que sea potencia de 2 debido a la estrategía que utiliza racle para este tipo de particionados.

-- Creamos varios TBS de prueba
CREATE TABLESPACE TBS_DAT1 DATAFILE SIZE 20M;
CREATE TABLESPACE TBS_DAT2 DATAFILE SIZE 20M;
CREATE TABLESPACE TBS_IDX1 DATAFILE SIZE 20M;
CREATE TABLESPACE TBS_IDX2 DATAFILE SIZE 20M;

-- Creamos una table de entrada de pedidos
CREATE TABLE ORDERS_TEST (
  ORDER_ID NUMBER,
  SOLD DATE)
PARTITION BY RANGE (SOLD)
 (PARTITION P1 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) TABLESPACE TBS_DAT1,
  PARTITION P2 VALUES LESS THAN (MAXVALUE) TABLESPACE TBS_DAT2);

-- Creamos el índice particionado Global de tipo Hash
CREATE INDEX ORDER_IDX ON ORDERS_TEST (ORDER_ID) GLOBAL
     PARTITION BY HASH (ORDER_ID)
     PARTITIONS 2 STORE IN (TBS_IDX1, TBS_IDX2);

-- Limpiamos el entorno
DROP TABLESPACE TBS_DAT1 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TBS_DAT2 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TBS_IDX1 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TBS_IDX2 INCLUDING CONTENTS AND DATAFILES;