me encontré con este párrafo en la documentación de Oracleorden de las tablas de consulta de unión
si desea seleccionar el nombre de cada departamento junto con el nombre de su director , se puede escribir la consulta en uno de dos maneras. En el primer ejemplo que sigue, la indirecta/++ ordenó ++/ dice que hacer la unión en el orden de los tablas aparecen en la cláusula FROM con intentar optimizar el orden de combinación.
SELECT /*+ordered*/ d.NAME, e.NAME FROM DEPT d, EMP e WHERE d.MGR = e.SS#
o:
SELECT /*+ordered*/ d.NAME, e.NAME FROM EMP e, DEPT d WHERE d.MGR = e.SS#
Supongamos que hay 10 departamentos y 1000 empleados, y que el tabla interna en cada consulta tiene un índice en la columna unirse. En la primera consulta, , la primera tabla produce 10 filas calificadas (en este caso, toda la tabla). En la segunda consulta, la primera tabla produce 1000 filas calificadas. La primera consulta accederá a la tabla EMP 10 veces y escaneará la tabla DEPT una vez. La segunda consulta escaneará la tabla EMP una vez, pero accederá a la tabla DEPT 1000 veces. Por lo tanto, la primera consulta funcionará mucho mejor. Como norma general , las tablas deben ser organizadas a partir de las filas numéricas más efectivas hasta el mayor número efectivo de filas . El tamaño de fila efectivo de una tabla en una consulta se obtiene por aplicando las condiciones lógicas que se resuelven por completo en esa tabla.
Pero no entiendo esto correctamente. Si hay filas m
en las filas de la tabla t1 y n
en la tabla t2, ¿el motor sql no pasaría por las filas m x n
en ambos casos?
Actualización: Gracias por todas las respuestas. No anularé el optimizador, solo quería confirmar mi pensamiento.
¿Puede usted por favor enviar un enlace al documento en el que lee esto? –
Falta la cláusula 'WHERE' en su segunda consulta, que se encuentra en la documentación de Oracle. –
@Peter - Se agregó donde la cláusula :) – Jerry