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

Duda sobre optimización de consulta

Estas en el tema de Duda sobre optimización de consulta en el foro de Mysql en Foros del Web. Buenos(as) días, tardes o noches: Mi duda la baso en que llevo algún tiempo programando en php, y poco a poco me ha tocado ir ...
  #1 (permalink)  
Antiguo 14/02/2012, 15:52
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Pregunta Duda sobre optimización de consulta

Buenos(as) días, tardes o noches:

Mi duda la baso en que llevo algún tiempo programando en php, y poco a poco me ha tocado ir retomando lo que sabía de sql, en este caso mysql, como es común.

Actualmente estamos desarrollando con un amigo una aplicación para el curso de webmaster que estamos realizando y como el lleva algo más de tiempo utilizando mysql, logra hacer algunas consultas que yo entiendo, pero que no estoy seguro de que se deban hacer así.

Yo se por que he leído muchos manuales que es preferible en muchos casos, hacer consultas en mysql, que calcular datos en el script, ya sea este php, asp, jsp, python, java, ruby... etc.

En este caso mi duda es con respecto a este tipo de consultas, ya que mi compañero solo desea realizarlas de ese modo y aunque de algún modo veo que tiene razón algo me dice que está fallando en estas... independientemente de las tablas, que se nombran, me gustaría saber si es mejor dividir estas consultas combinadas en otras menos complejas... como les digo hasta ahora estoy retomando mysql y la verdad mi experiencia no es mucha.. les dejo la consulta

Código SQL:
Ver original
  1. SELECT
  2.   datosDoc.apellido AS ape,
  3.   datosDoc.nombres AS nombre,
  4.   asignaturas.nombre AS asigna,
  5.   notas.nota,
  6.   notas.fallas AS falla,
  7.   grad_asig.horas AS INTENSIDAD
  8. FROM
  9.   datosDoc, asignaturas,
  10.   asigdocgra, grad_asig,
  11.   cursos, notas, estudiante
  12. WHERE
  13.   grad_asig.cursos_idcursos =  '357'
  14.   AND cursos.idcursos = grad_asig.cursos_idcursos
  15.   AND asignaturas.idasignatura = grad_asig.asignaturas_idasignatura
  16.   AND grad_asig.idgrad_asig = asigdocgra.grad_asig_idgrad_asig
  17.   AND datosDoc.documento = asigdocgra.datosDoc_documento
  18.   AND notas.estudiante_documento =  '14568997'
  19.   AND estudiante.documento = notas.estudiante_documento
  20.   AND notas.trimestre =  '1'
  21.   AND notas.cursos_idcursos =  '357'
  22.   AND cursos.idcursos = notas.cursos_idcursos
  23.   AND asignaturas.idasignatura = notas.asignaturas_idasignatura
  24.   AND notas.yeards='2011'
  25. ORDER BY valor

Es bueno realizar este tipo de consultas, se puede optimizar,.. las dejo así y le doy la razón a mi compañero?.. la verdad este tema todavía me confunde un poco...

Muchas gracias por su colaboración
  #2 (permalink)  
Antiguo 15/02/2012, 02:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda sobre optimización de consulta

De entrada lee sobre la sintaxis de JOIN.

Segundo para saber si una consulta és optima o no se debe saber que es lo que se esta buscando con ella y sobre todo como se va a usar.

Asi sin mas explicación lo unico que se puede decir és si la sintaxis esta bien o no, y ya te digo que leas sobre JOIN.

ORDER BY valor... sin alias de la tabla de donde proviene ...???

otra pista que nos podria ayudar es la alternativa que tu planteas.... es decir poder valorar frente a que es optimo o no usar esta consulta.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 15/02/2012 a las 02:50
  #3 (permalink)  
Antiguo 15/02/2012, 09:00
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Respuesta: Duda sobre optimización de consulta

Hola quimfv, en realidad estuve estudiando un poco y ya tengo un tipo de solución para esto, ya que me di cuenta que haciendo los inner join correctos.. se puede llegar a reducir mucho la claúsula where y además, obtener los mismo resultados, mi alternativa en este momento, sin incluir las notas y las fallas del estudiante, sería esta:

Código SQL:
Ver original
  1. SELECT 
  2.     areas.nombre AS nomArea,
  3.     areas.idarea,
  4.     ASIG.nombre AS nomAsig,
  5.     HVD.nombres,
  6.     HVD.apellidos
  7. FROM   
  8.     asignaturas AS ASIG
  9. INNER JOIN
  10.     grados_asignaturas AS GA
  11. ON
  12.     ASIG.idasignatura = GA.asignaturas_idasignatura
  13. INNER JOIN
  14.     areas
  15. ON
  16.     ASIG.areas_idarea = areas.idarea
  17. INNER JOIN
  18.     asigdocgra AS ADG
  19. ON
  20.     GA.idgrados_asignaturas = ADG.grados_asignaturas_idgrados_asignaturas
  21. INNER JOIN
  22.     hojavidadocente AS HVD
  23. ON
  24.     ADG.hojavidadocente_documento = HVD.documento
  25. WHERE
  26.     GA.cursos_idcursos = '$_GET[idcurso]'
  27. ORDER BY
  28.     areas.nombre ASC,
  29.     ASIG.nombre ASC

Si puedes darme un consejo sobre esto te lo agradecería... ya que esto lo estoy necesitando muy urgente...

muchísimas gracias tanto por el consejo anterior como por colaborarme
  #4 (permalink)  
Antiguo 15/02/2012, 11:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda sobre optimización de consulta

Esa consulta es sintacticamente correcta no puedo decir nada mas, sin conocer

. La estructura completa de la bbdd
. Que datos estas buscando (la consulta da unos pero no se si son los que buscas)
. Como vas a usar esa consulta
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: combinado, complejo, extenso, select, simplificar, simplificidad
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 12:28.