Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

que consulta es mejor en relaciones con INNER JOIN

Estas en el tema de que consulta es mejor en relaciones con INNER JOIN en el foro de Mysql en Foros del Web. hola quiciera saber si existe diferencia entre estas dos consultas y cual seria la mejor para utilizar. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT   ...
  #1 (permalink)  
Antiguo 09/02/2011, 13:43
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 1 mes
Puntos: 15
que consulta es mejor en relaciones con INNER JOIN

hola quiciera saber si existe diferencia entre estas dos consultas y cual seria la mejor para utilizar.

Código MySQL:
Ver original
  1. SELECT     AsText(P.poligono) poligono
  2.                  FROM propiedad P
  3.                  INNER JOIN propiedadxusuario PXU
  4.                  ON PXU.idpropiedad=P.idpropiedad
  5.                  WHERE PXU.iduser=1

ó

Código MySQL:
Ver original
  1. SELECT     AsText(P.poligono) poligono
  2.                  FROM propiedad P
  3.                  INNER JOIN propiedadxusuario PXU
  4.                  ON PXU.idpropiedad=P.idpropiedad
  5.                  INNER JOIN usuarios U
  6.                  ON U.iduser=PXU.iduser
  7.                  WHERE U.iduser=1;

saludos
  #2 (permalink)  
Antiguo 09/02/2011, 14:02
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: que consulta es mejor en relaciones con INNER JOIN

La segunda consulta sólo tiene sentido si vas a obtener datos que provengan de la tabla USUARIOS. De lo contrario es absolutamente innecesaria.
En el contexto de tu select, lo único que hace es bajar la performance porque abres una tabla que en realidad no usas para nada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/02/2011, 15:18
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 1 mes
Puntos: 15
Respuesta: que consulta es mejor en relaciones con INNER JOIN

hola muchas gracias por tu respuesta , es que haciendo pruebas con INNER JOIN me surgieron dudas sobre su funcionamiento , siguiendo con el mismo ejemplo

que diferencia hay con esta y la anteriores pues me retornan los mismos datos o no tiene relevancia?

Código MySQL:
Ver original
  1. SELECT     AsText(P.poligono) poligono
  2.                      FROM propiedadxusuario PXU
  3.                      INNER JOIN propiedad P
  4.                      ON PXU.idpropiedad=P.idpropiedad
  5.                      WHERE PXU.iduser=1

saludos
  #4 (permalink)  
Antiguo 09/02/2011, 18:02
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: que consulta es mejor en relaciones con INNER JOIN

Tiene relevancia.
Fíjate que el campo iduser pertenece a la tabla PROPIEDADXUSUARIO, por lo que si no la cruzas con PROPIEDAD, que es donde está el polígono, jamás podrías obtener el polígono que pertenezca al usuario buscado.
Ese es el sentido del modelo relacional y de la normalización de las tablas....
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/02/2011, 21:14
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 1 mes
Puntos: 15
Respuesta: que consulta es mejor en relaciones con INNER JOIN

pero en el tema de rendimiento es la misma consulta , me imagino que lo ideal seria colocar la tabla propiedad despues del from en vez de propiedadxusuario .


saludos
  #6 (permalink)  
Antiguo 09/02/2011, 21:52
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: que consulta es mejor en relaciones con INNER JOIN

En un INNER JOIN con sólo dos tablas lo que importa en realidad es la relación establecida. En todo caso lo importante es que en el ON el origen de los campos cruzados respete el orden en que aparecen las tablas, es decir que el primer campo de la igualdad pertenezca a la primera tabla.
En cuanto a performance, lo mejor es que la relación esté determinada por FK, porque de esa forma lo que MySQL lee en realidad es el índice que se creó al definir la FK, y con ello la cantidad de registros leídos es la menor. En estos casos el uso de tablas InnoDB tiene más impacto que el orden de las tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 10/02/2011, 08:00
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 1 mes
Puntos: 15
Respuesta: que consulta es mejor en relaciones con INNER JOIN

osea que esta consulta estaria bien segun lo que dices de el orden de las tablas.?

Código MySQL:
Ver original
  1. SELECT     AsText(P.poligono) poligono
  2.                      FROM propiedad P
  3.                      INNER JOIN propiedadxusuario PXU
  4.                      ON P.idpropiedad=PXU.idpropiedad
  5.                      INNER JOIN detallexusuario DXU
  6.                      ON DXU.idpropiedad=P.idpropiedad
  7.                      WHERE PXU.iduser=1

a que te refieres con esto"En estos casos el uso de tablas InnoDB tiene más impacto que el orden de las tablas."?

saludos

Última edición por RIVERMILLOS; 10/02/2011 a las 08:14
  #8 (permalink)  
Antiguo 10/02/2011, 11:15
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: que consulta es mejor en relaciones con INNER JOIN

Exacto, esa sería la idea de orden de campos.
Cita:
a que te refieres con esto"En estos casos el uso de tablas InnoDB tiene más impacto que el orden de las tablas."?
Es un tema de la lógica interna del MySQL y de las bases relacionales en general.
Las tablas relacionales (que en MySQL sólo son las InnoDB) crean un índice que le permite al DBMS administrar las claves y los registros relacionados entre tablas. En ese contexto, la existencia de un índice permite al parser que se pueda establecer sin abrir las tablas si existe algún registro cuyos valores buscados coincidan con un criterio inicial: El del JOIN.
Si la clave buscada es parte de la clave relacional y no existe ninguna entrada en el índice que la contenga, simplemente las tablas se descartan y la respuesta es una tabla vacía.
Si el valor es parte de la clave, entonces sólo se buscan los registros que aparecen indicados en el índice, si es que son menos que toda la primera tabla... Si son más, o no aparece el valor en la clave, leen sólo los que están relacionados y luego se filtra el resto de las condiciones.
Cuando las tablas no son relacionales, no existe indice que vincule ambas tablas, por lo que debe leer toda la primera tabla comparándola con la segunda, lo que es algo más ineficiente que en el caso anterior. En estos casos es conveniente que la primera tabla sea siempre la que contenga la menos cantidad de registros para hacer un matching más eficiente. En el caso de las tablas no relacionales es imposible para el parser devolver una tabla vacía cuando no hay coincidencias sin antes leer ambas tablas... conlo que lo que hace es desperdiciar tiempo de procesamiento.

Como podrás notar, son problemas de lógica interna que no son visibles para el usuario. Sólo se estudian en profundidad en las carreras de informática...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/02/2011, 15:02
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 1 mes
Puntos: 15
Respuesta: que consulta es mejor en relaciones con INNER JOIN

Muchas gracias ahora me quedo claro.


saludos

Etiquetas: join, relaciones, mejoras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:45.