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

¿Que es mejor? varias consultas, select anidados o inner joins

Estas en el tema de ¿Que es mejor? varias consultas, select anidados o inner joins en el foro de Mysql en Foros del Web. Tengo tres opciones que puedo dar para llegar a un resultado. La idea de estas consultas es llegar al campo DESCRIPCION de la tabla OBRA ...
  #1 (permalink)  
Antiguo 16/02/2013, 11:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 8 meses
Puntos: 4
¿Que es mejor? varias consultas, select anidados o inner joins

Tengo tres opciones que puedo dar para llegar a un resultado. La idea de estas consultas es llegar al campo DESCRIPCION de la tabla OBRA

Primera opción varias consultas para llegar a un resultado concreto

Código MySQL:
Ver original
  1. select id_persona from solicitud where id = 1
  2.  
  3. select id_obra from persona where id = '".$row1[id_persona]."';
  4.  
  5. select descripcion from obra where id = '".$row2[id_obra]."'

Segunda opcion, un select anidado para llegar a un resultado concreto

Código MySQL:
Ver original
  1. select descripcion
  2. from obra
  3. where id = (select id_obra from persona where id = (select id_persona from solicitud where id = 1))

Tercera opcion, inner join para llegar a un resultado concreto

Código MySQL:
Ver original
  1. SELECT obra.descripcion
  2. FROM obra
  3.             Inner Join persona ON obra.id = persona.id_obra
  4.             Inner Join solicitud ON persona.id = solicitud.id_persona
  5. where solicitud.id = 1

Me gustaría que me entregaran toda su sabiduría y me dijeran cual es la mejor opción, la mas rápida y sobre todo me gustaría que me dijeran POR QUE, ya que eso es lo que busco para empezar a depurar mis sistemas y empezar a hacer los nuevos mejores.

Última edición por gnzsoloyo; 16/02/2013 a las 16:50 Razón: Código de programación no permitido en foros de BBDD.
  #2 (permalink)  
Antiguo 16/02/2013, 19:10
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: ¿Que es mejor? varias consultas, select anidados o inner joins

Te dare mis conocimientos que no los considero muy amplios pero creo que un poco te podrán ayudar. Desde ya te digo que la tercera opción es la correcta.
De todas maneras, dependiendo la cantidad de registros de cada tabla verás la diferencia de performance.

Código 1:
Primero de todo, hacer consultas separadas no es lo idea, ya que si estás trabajando desde algún leguanje web, deberás realizar 3 conexiones directas a la BD en vez de una, por lo que de por sí perderas perfomance.

Código 2:
En mi opinión, ese código es totalmente imperfomante, te hago la siguiente consulta.
¿Qué pasaría si en la tabla de solicitudes existen dos registros con id=1).
PUMM, fallaría todo, de todas maneras eso es un tema de estructura.
Pero ese query no es para nada de mi agrado.


Cóidigo 3:
Aquí esta el tema de la verdad, esa consulta esta muy bien! Pero a veces existen veces que de todas maneras esas consultas son un dolor de cabeza, y tardan muchísmo en devolver los datos ya que la cantidad de registros que existen en la tabla son muyyy grandes
Para eso te dejo un tip, hay que leer un poco acerca de los índices, ellos serán los encargados de performar aquellas consultas.

No te puedo dar una clase avanzada de índices, pero digamos que son campos claves , que le den un ordenamiento a tus registros (muy importante para acceder a los datos), ocupando + espacio en disco, y además que deben ser referscados ya que no se actualizan solos (ordenan solos).


En tu ejemplo, los índices que crearía serían los siguientes:

id_persona --> en la tabla de solicitud y persona (si el id_persona es un PK, creo que de por sí se genera el índice por default).

id_obra --> en obra y en persona.

Vuelvo a repetir, se utilizan cuando realmente existe una cantidad grande de registros que atrasan la devolución de datos. Además existen varios tips para mejorar querys, fuera de los ejemplos que citaste.

Pero bueno, quedate con el código numero 3 y todo debería andar bien.
  #3 (permalink)  
Antiguo 17/02/2013, 10:33
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: ¿Que es mejor? varias consultas, select anidados o inner joins

Muy bien, pues era la respuesta que suponia. Sobre el tema de los indices generalmente trabajo con PK y FK por lo que tengo bien cubierto ese tema. Ultimamente estoy averiguando mas sobre indices y con esto ya voy quedando muy claro de que varias cosas las estaba haciendo mal, te agradesco por tu respuesya tomibolo !!
  #4 (permalink)  
Antiguo 18/02/2013, 11:34
 
Fecha de Ingreso: octubre-2009
Ubicación: La Serena, Chile
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Información Respuesta: ¿Que es mejor? varias consultas, select anidados o inner joins

Bueno mi respuesta sera mas sencilla. La opcion tres
Código:
INNER JOIN
o
Código:
LEFT JOIN
o
Código:
RIGHT JOIN
es la mejor. por 2 motivos, generas una sola consulta o trasmisión de datos desde y hacia la base de datos. 2 Todo el trabajo de indexado y unión de los resultados se hace en el servidor. Lo cual es bastante rapido

espero te sirva

suerte.

Etiquetas: anidados, join, joins, select, sql, tabla
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:59.