Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/06/2011, 13:37
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: duda con where e inner join.

El INNER JOIn te asegura que el bloque de datos a filtrar luego con WHERE cumple seguro con la restricción dada en el ON. Esa restricción además le asegura un prefiltrado eficiente y mucho más potente que lo que puedes lograr usando el WHERE.
Pero la eficiencia u optimización de una consulta son se cierra en ese punto. La selectividad de una relación entre dos tablas es crítica muchas veces.
Por ejemplo, si haces un INNER JOIN productos y ventas, obtendrás los productos efectivamente vendidos... pero eso en u supermercado puede representa millones de registros, mientras que si lo que quieres es un bloque menor, más restringido, puede requerirse, por ejemplo una subconsulta que genere una tabla derivada.
Por ejemplo:
Código MySQL:
Ver original
  1.     campo1,
  2.     campo2
  3.     tabla1 T1 INNER JOIN
  4.     (SELECT * FROM tabla2 WHERE otrocampo IN(1,2,4)) T2 ON T1.id1= T2.id2 ;
  5. WHERE [otras condiciones]
Te este modo, con esa subconsulta se puede restringir con qué datos vas a trabajar de una de las tablas, haciendo más eficiente la consulta.
Otra de las posibilidades es crear índices sobre determinados conjuntos de campos. Eso si, hay que ser cuidadoso con estos índices porque si tienes muchos INSERT/UPDATE, el exceso de índices puede afectar la performance de esos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)