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

Simplificar Consulta SQL

Estas en el tema de Simplificar Consulta SQL en el foro de Mysql en Foros del Web. Necesito ayuda, tengo una consulta sql que es esta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT * FROM comunicados_muestra LEFT JOIN comunicados_leidos ON comunicados_muestra . ...
  #1 (permalink)  
Antiguo 16/07/2012, 10:58
 
Fecha de Ingreso: julio-2012
Ubicación: Asunción
Mensajes: 54
Antigüedad: 12 años, 5 meses
Puntos: 3
Pregunta Simplificar Consulta SQL

Necesito ayuda, tengo una consulta sql que es esta:

Código SQL:
Ver original
  1. SELECT * FROM comunicados_muestra
  2. LEFT JOIN comunicados_leidos
  3. ON
  4. comunicados_muestra.id_comunicado = comunicados_leidos.id_comunicado_leido
  5. AND comunicados_leidos.id_interno_leido = '5'
  6. ORDER BY comunicados_muestra.fecha_modif DESC
  7. LIMIT 0 , 30

Explico la extructura:
Terminos y utilidades:
“Comunicado” (es una tabla en la cual yo cargo noticias, que quiero que mis usuarios lean)

Tabla comunicados_muestra:
tiene algunos campos como:
* id_comunicado (identificador único del comunicado cargado)
* fecha_modif (fecha de carga o modificación)
Tabla comunicados_leidos
inserto en esta tabla los id_comunicado ya leído y el id de quien los leyó
campos:
id_comunicado_leido( el nro del comunicado que se leyó)
id_interno_leido( el id del usuario logeado)
La consulta SQL hace exactamente lo que quiero, me trae “todos” los campos de la tabla comunicados_muestra y “alinea” con los datos de la tabla comunicados_leidos por los 2 criterios que le pido (quién leyó y qué leyó).
El único problema es que la consulta tarda 1.4 segundos en ser procesada por mi servidor SQL
Existe alguna forma de tener el mismo resultado, pero haciendo una consulta más rápida?
Agradezco las respuestas!
__________________
--
What is real? How do you define real?
If real is what you can feel, smell, taste and see, then real is simply electrical signals interpreted by your brain.
  #2 (permalink)  
Antiguo 16/07/2012, 11:00
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 10 meses
Puntos: 27
Respuesta: Simplificar Consulta SQL

agregale indices compuesto.. por los 2 campos que haces el join.. o sea a tu tabla "comunicados_leidos"
__________________
Asunción Paraguay
Licenciado - Desarrollador Web - Lider de Proyecto/Desarrollador Banco Local
Espacio Geek - Comunidad Tecnologica
  #3 (permalink)  
Antiguo 16/07/2012, 11:20
 
Fecha de Ingreso: julio-2012
Ubicación: Asunción
Mensajes: 54
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Simplificar Consulta SQL

Cita:
Iniciado por vicram10 Ver Mensaje
agregale indices compuesto.. por los 2 campos que haces el join.. o sea a tu tabla "comunicados_leidos"
Gracias por la respuesta,
en realidad no tengo la más mínima idea como hacer lo que me sugeriste.. me podrías dar algun ejemplo?
__________________
--
What is real? How do you define real?
If real is what you can feel, smell, taste and see, then real is simply electrical signals interpreted by your brain.
  #4 (permalink)  
Antiguo 16/07/2012, 11:28
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Simplificar Consulta SQL

Hola skyspablo:

Puedes comenzar por leer la documentación oficial acerca de los índices:

http://dev.mysql.com/doc/refman/5.0/...ate-index.html

También deberías evitar hacer un SELECT *, independientemente de si son muchos los campos que tiene cada tabla... esta es una de las peores prácticas que aun tienen algunos programadores. Debes listar sólo los campos que realmente necesites, y si son todos, debes listarlos todos, pero no poner *.

también deberías poner la condición

Código:
comunicados_leidos.id_interno_leido = '5'
en la sección WHERE y no en la sección ON del INNER...

Código:
SELECT 
  CM.campo1, CM.campo2,.....,
  CL.campo1, CM.campo2,......
FROM comunicados_muestra CM
LEFT JOIN comunicados_leidos CL
ON CM.id_comunicado = CL.id_comunicado_leido
WHERE
  comunicados_leidos.id_interno_leido = '5'
ORDER BY 
  comunicados_muestra.fecha_modif DESC
LIMIT 0 , 30
Saludos
Leo.
  #5 (permalink)  
Antiguo 16/07/2012, 15:43
 
Fecha de Ingreso: julio-2012
Ubicación: Asunción
Mensajes: 54
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Simplificar Consulta SQL

Excelente, muchas gracias por el concejo de no usar Select *, ahora mismo leo la documentacion del index y pruebo consulta.

PD:
Probando en otro servidor sql la consulta me respondió en 0.02 seg.
lo que me da a entender que también depende de la velocidad del servidor..
__________________
--
What is real? How do you define real?
If real is what you can feel, smell, taste and see, then real is simply electrical signals interpreted by your brain.

Etiquetas: consulta+sql, simplificar
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 04:02.