Buenas con tod@s,
Sucede que tengo una tabla particionada por rango, las particiones son generadas diariamente tomando como índice de partición una columna llamada S_TIMESTAMP de tipo Date y tengo la siguiente consulta:
Código SQL:
Ver originalSELECT
COL_A,
COL_B,
COL_C,
S_TIMESTAMP
FROM DM.CDR_GPRS PARTITION(P_20140618)
WHERE
S_TIMESTAMP > TO_DATE('20140616205959', 'YYYYMMDDHH24MISS')
UNION
SELECT
COL_A,
COL_B,
COL_C,
S_TIMESTAMP
FROM DM.CDR_GPRS PARTITION(P_20140619 )
UNION
SELECT
COL_A,
COL_B,
COL_C,
S_TIMESTAMP
FROM DM.CDR_GPRS PARTITION(P_20140620 )
UNION
SELECT
COL_A,
COL_B,
COL_C,
S_TIMESTAMP
FROM DM.CDR_GPRS PARTITION(P_20140621 )
UNION
SELECT
COL_A,
COL_B,
COL_C,
S_TIMESTAMP
FROM DM.CDR_GPRS PARTITION(P_20140622)
WHERE
S_TIMESTAMP <= TO_DATE('20140620205959', 'YYYYMMDDHH24MISS');
Pero al analizar el plan de ejecución me arroja varios Table Access Full.
https://www.dropbox.com/sh/2ha2zqfr8...#f:print01.png
Para el primer select me toma correctamente el índice creado (IDX_GPRS_S_TIMESTAMP) no hay Table Access Full. Para los selects del centro que no tienen where pienso que se debe porque se hace un barrido de toda la partición, sin embargo, me extraña el último select que es muy similar al primero ya que filtra por el campo S_TIMESTAMP que está indizado.
Por favor si me pudieran orientar para optimizar está consulta.
Muchas gracias, saludos.