Category: Oracle

Mejorando el desempeño de consultas con QUERY REWRITE y Vistas Materializadas

Desde Oracle 8i existe una funcionalidad de la base de datos Oracle llamada QUERY REWRITE, en la cual en ciertas circunstancias de configuración de parámetros y objetos de base de datos, un SQL emitido por un usuario es re-escrito por otro equivalente que tiene mejor costo. En consecuencia esta funcionalidad tiene como requisito que el optimizador esté configurado como CBO.

Un caso de aplicación frecuente en el uso de QUERY REWRITE se da en ambientes de datawarehouse, donde consultas que usan funciones de grupo sobre una fact table de millones de registros, pueden ser resueltas sobre una tabla de resumen (de cardinalidad mucho menor que la fact table) que contenga la misma información pero con mucho menos lecturas en disco.

Las tablas de resúmenes indicadas se deben implementar con Vistas Materializadas para hacer uso de la característica de QUERY REWRITE.

Cambio en el comportamiento del GROUP BY in Oracle 10g

Si usted recientemente actualizo su versión de base de datos oracle a la versión 10g, habrá notado que las consultas que agrupan (GROUP BY) le entrega los resultados en cualquier orden.

Pues bien, desde la versión oracle 10g el comportamiento de esta clausula ha cambiado con respecto a sus predecesores.  Ahora esta usando el nuevo mecanismo  HASH GROUP BY, el cual no garantiza que el resultado este en ningún orden a menos que utiliza la clausula “ORDER BY”.

Realicemos una prueba para verificar este comportamiento

En Oracle 9i

SQL> select owner,count(1) from dba_segments group by owner;

OWNER    COUNT(1)
CTXSYS    76
HR        25
MDSYS    53
ODM        82
ODM_MTR    12
OE        46
OLAPSYS    149
ORDSYS    7
OUTLN    6

Plan de Ejecución

SELECT STATEMENT  CHOOSE
50 SORT GROUP BY
49 VIEW SYS.SYS_DBA_SEGS
48 UNION-ALL
……

En Oracle 10g

FireStats icon Powered by FireStats