Estoy trabajando con una base de datos de Oracle intentando sintonizar algunas consultas y tengo problemas para entender por qué trabajar una cláusula en particular de una manera particular tiene un impacto tan drástico en el rendimiento de la consulta. He aquí una versión performant de la consulta que estoy haciendo¿Por qué estas consultas aparentemente similares tienen tiempos de ejecución tan drásticamente diferentes?
select * from
(
select a.*, rownum rn from
(
select *
from table_foo
) a where rownum <= 3
) where rn >= 2
La misma consulta mediante la sustitución de las dos últimas líneas con este
) a where rownum >=2 rownum <= 3
)
realiza horriblemente. Varios órdenes de magnitud peor
) a where rownum between 2 and 3
)
también funciona de forma horrible. No entiendo la magia de la primera consulta y cómo aplicarla a otras consultas similares.
Puede ejecutar un análisis de consulta ('EXPLAIN PLAIN', http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/ex_plan.htm) para ver cómo el DBMS ejecuta la consulta. – outis
Como nota al margen, ¿por qué 'seleccionar *' cuando se podía simplemente 'seleccionar * de (seleccionar a. *, Rownum rn de table_foo a donde rownum <= 3) donde rn> = 2'? –