Ver Mensaje Individual
  #17 (permalink)  
Antiguo 23/12/2011, 05:57
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de cuatro tablas... INICIACION

Hay una gran diferencia entre usar INNER JOIN para realizar una consulta, y poner las condicioens en el ON: La performance.
Cuando usas INNER | LEFT | RIGH JOIN, los registros coincidentes se van seleccionado a medida que se leen las tablas, por lo que el proceso es bastante rápido. Además, el FROM es optimizable por el parser, lo que quiere decir que puede usar diferetes algoritmos internos según lo que determine, y también según los resultados obtenidos estadísticamente en el uso de otras consultas.
No te olvides que en un DBMS hay inteligencia incorporada para tomar decisiones según resultados anterores. Por eso dos consultas estructuralmente idénticas pueden tener tiempo de ejecución distinta.
En cambio, cuando usas las condiciones en el WHERE, MySQL no puede hacer optimizaciones antes de tener todas las tablas, porque el WHERE se aplica sobre los resultados de la lectura, lo que en realidad quiere decir que debe levantar todos los registros, los coincidentes y los no coincidentes, antes de verificar cuáles cumplen con las condiciones. Esto es sencillamente porque las condicioens del WHER se aplican sore la tabla resultado de la junta... ¿Se entiende?

Cuando pruebas la performance con tablas pequeñas, el impacto de la forma de usar las condiciones no es muy visible. La rapidez del procesamiento no permite ver grandes diferencias. Pero cuando tienes muchos datos (1.000.000 registros por tabla o más), la diferencia se hace notoria.

Sintetizando:

1) Evita en lo posible usar la coma para crear el JOIN.
2) Usa INNER | LEFT | RIGH JOIN según lo necesites.
3) No leas más columnas de las que usarás ("SELECT *" es la peor forma de consulta). Ocupan espacio en memoria y si no usas todos los datos, traes basura.
4) Crea índices para las consultas más habituales. No para todas. Usan disco y puedes afectar la performance de los INSERT / UPDATE.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)