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

Es muy extraña esta Consulta

Estas en el tema de Es muy extraña esta Consulta en el foro de Mysql en Foros del Web. Hola a todos, mi primer post después de mucho leerlos. El motivo de este post es consultar con ustedes una pequeña duda, paso a detallar. ...
  #1 (permalink)  
Antiguo 30/09/2008, 11:37
Avatar de kopfnickend  
Fecha de Ingreso: febrero-2008
Ubicación: Bueno Aires (provincia)
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 2
Pregunta Es muy extraña esta Consulta

Hola a todos, mi primer post después de mucho leerlos. El motivo de este post es consultar con ustedes una pequeña duda, paso a detallar.

Tengo una base de datos InnoDB referenciada, donde todas las tablas (7) son hijas de un único padre. Se da que es la primera vez que trabajo con este tipo de "arquitectura" (no se el nombre) y me surgió una duda. Tengo que hacer una consulta en una tabla hija, en la cual tengo almacenado el ID del padre, que a su vez, también necesito el nombre del padre. Ejemplo.

Código:
Tabla Padre
   ID entero auto increment llave primaria
   Nombre varchar 20
   ... (Muchos mas campos)

Tabla Hija
  ID entero auto icrement llave primaria
  ID_padre
  .... (muchos mas campos)

Código:
SELECT Hija.ID,Padre.Nombre,(.... Demas campos) FROM Hija, Padre WHERE Hija.ID_padre = Padre.ID ORDER BY (Algun campo) DESC LIMIT 5
¿Hay otra forma de hacer esto? pregunto ya que tal vez al ser de tipo InnoDB hay alguna manera rara que no conozco de hacer lo mismo y que sea menos costosa para el MySQL. Es un consulta larga se traen muchos campos y por ese motivo quería ver si esta optimizada.

El ejemplo lo invente recién pero demuestra claramente mi problema. Les agradecería toda respuesta que me puedan brindar.
  #2 (permalink)  
Antiguo 30/09/2008, 11:47
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Es muy extraña esta Consulta

Usa Joins en vez de " = "
También puedes usar la función Explain de mysql para revisar tus consultas

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 30/09/2008, 11:50
Avatar de kopfnickend  
Fecha de Ingreso: febrero-2008
Ubicación: Bueno Aires (provincia)
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Es muy extraña esta Consulta

SELECT Hija.ID,Padre.Nombre,(.... Demas campos) FROM Hija, Padre WHERE Hija.ID_padre JOIN Padre.ID ORDER BY (Algun campo) DESC LIMIT 5

¿Así?

Me podes dar un Ejemplo, es un proyecto grande y quiero optimizarlo lo máximo posible, (asi no me tira bronca el Hosting)
  #4 (permalink)  
Antiguo 30/09/2008, 12:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Es muy extraña esta Consulta

SELECT Hija.ID,Padre.Nombre,(.... Demas campos) FROM Hija INNER JOIN padre ON Hija.ID_padre=Padre.ID ORDER BY (Algun campo) DESC LIMIT 5

Pero debes indexar ID_padre de la tabla Hija, porque imagino que id de la tabla Padre es primary key y ya está indexado.
Empieza con esto, que es lo que te estaba aconsejando Genetix.
  #5 (permalink)  
Antiguo 30/09/2008, 12:07
Avatar de kopfnickend  
Fecha de Ingreso: febrero-2008
Ubicación: Bueno Aires (provincia)
Mensajes: 43
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Es muy extraña esta Consulta

Mil Gracias. Los indices están creados y las relaciones están hechas, solo me faltaba esto. Es que es la única consulta que hago alrevez, buscando en Hija y queriendo llegar al Padre.

Les agradezco mucho. Pasé de 0.0249 a 0.0114 seg. (Tengo pocos registros, por ahora. pero es mucho!)

pd: Como sirven los foros xD
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 00:31.