2012-06-14 10 views
7

? Hay algún significado en el orden de la tabla en la declaración de ensamblado sql. Por ejemplo¿Hay algún significado en el orden de la tabla en la instrucción de ensamblado sql

SELECT dept_name, emp_name 
FROM Employee 
INNER JOIN Department ON Employee.dept_id = Department.dept_id 

y

SELECT dept_name, emp_name 
FROM Department 
INNER JOIN Employee ON Employee.dept_id = Department.dept_id 

existe por tanto ninguna ventaja de rendimiento en el orden de las tablas?

Respuesta

9

No, no hay.

La mayoría (si no todos) el uso de DBMS de un optimizador basado en el costo. El orden en que especifica sus declaraciones no afecta la velocidad de ejecución.

Oracle SQL cost based optimization

optimizador de SQL basado en el costo de Oracle (CBO) es un componente extremadamente sofisticada de Oracle que rige la ejecución por cada consulta de Oracle. El CBO se ha convertido en uno de los componentes de software más sofisticados del mundo , y tiene el desafiante trabajo de evaluar cualquier declaración SQL y generar el "mejor" plan de ejecución para la declaración .

Ambas sus declaraciones generarán el mismo plan de ejecución y por lo tanto tienen las mismas características del perfomance. Tenga en cuenta que el costo se basará en las estadísticas disponibles. Las estadísticas actualizadas son muy importantes para que el optimizador pueda generar el plan de ejecución más eficiente.

+1

+1. Yo agregaría (solo para resaltar) que las dos declaraciones deberían generar el mismo plan de ejecución, * todo lo demás es igual * (es decir, analizado aproximadamente al mismo tiempo, con las mismas estadísticas de tabla, etc.). Hay circunstancias (fuera del alcance de esta pregunta) en las que las dos consultas pueden dar diferentes planes. –

0

No. El optimizador descubre la mejor ruta de combinación, o al menos cuál es la mejor ruta de combinación. En situaciones inusuales, a veces no tiene toda la información que necesita, pero el 99% de las veces lo hará bien. También reescribirá internamente la declaración SQL de otras maneras.

1

El optimizador verificará todas las permutaciones posibles de la orden de unión y tomará la que tenga el valor de costo más bajo. Eso significa que optimizarse a sí mismo, preparar la declaración, se convierte en un cuello de botella para declaraciones complejas. Cuantas más tablas unir, más variantes de plan de ejecución para verificar, matemáticamente hablando: n! (Factorial).

fuente: http://use-the-index-luke.com/sql/join

-1

como otros anwsers dice, no.
pero piensa si puedes reemplazar algunas uniones internas con uniones izquierdas. en la mayoría de las consultas esto es un beneficio en el rendimiento

+0

En realidad, lo tienes al revés. Una unión interna generalmente se comporta mejor que una combinación externa. – Allan

5

En general, no, no importará. El optimizador debería ser capaz de determinar el orden más eficiente para unir las tablas independientemente del orden en que aparecen en la consulta.

Es posible, sin embargo, que el orden de las tablas afecte el plan de consulta. En general, este no sería el caso si tiene una combinación simple de dos tablas, pero a medida que aumenta el número de tablas en una consulta, el número de combinaciones posibles crece a una tasa O (n!). Muy rápidamente, resulta imposible para el optimizador considerar todas las órdenes de combinación posibles, por lo que debe usar varias heurísticas para podar el árbol. Esto, a su vez, conduce a situaciones en las que el optimizador elige una tabla de conducción diferente si esa tabla aparece primero en la declaración de SQL en lugar de cuando esa tabla es la décima en la consulta. Jonathan Lewis tiene una buena publicación de blog que muestra cómo the order tables appear in a query can affect the query plan.Si desea ser extremadamente cuidadoso, enumerar la mesa de conducción primero es algo razonable de hacer; no servirá de ayuda con mucha frecuencia, pero ocasionalmente puede ser útil.

+0

+1 Pensé en mencionar algo sobre esto en mi respuesta, pero no pude explicarlo tan simple como lo hizo y para la mayoría de las intenciones y propósitos, hay pocas posibilidades de que alguna vez lo muerda. –

+0

Acabo de encontrarme con una situación en la que tenía una mesa con filas de 1.5M unidas con otras 4 tablas con ~ 50k filas cada una. El orden de las uniones tuvo un claro impacto con las consultas que tomaron> 30 segundos en algunos pedidos, ~ .01 segundos en otros. –

Cuestiones relacionadas