Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/01/2011, 14:37
Avatar de mayid
mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
mucha lentitud desde hace algunos dias

Tengo alojada la web en piensa solutions. Por alguna razon, desde el viernes anda fatalmente lenta en algunas secciones. El factor comun de esas secciones es que usan la base de datos. Pero sin embargo hay alguna otra seccion que tiene bd y anda normal.

La cuestion es que desde el hosting dicen que ha de ser problema del script. Y yo no lo creía así en un primer momento. Es cierto que estuve modificando algo las consultas, y que por ejemplo hay un calculo sum() para conocer "las fotos mas votadas". Pero al margen de esto ultimo no hice nada que pueda haber causado tal lentitud! Y ademas los cambios anduvieron bien durante casi un dia.

Me resisto a pensar que el problema sea de mysql. Pero creo que lo de "mas votadas" es el problema. Aunque a otras secciones también las vi lentas!

Les dejo las consultas de la pagina principal (la galeria) a ver si las ven a bien:

Código MySQL:
Ver original
  1. SELECT id, titulo FROM albums WHERE id_usuario = '1' ORDER BY id DESC LIMIT 10
  2.  
  3. SELECT album.id, album.titulo, album.descripcion, album.id_usuario, album.creado, usuario.nombre, usuario.apellido, cat.categoria, foto.nombre_foto
  4. FROM albums AS album
  5. INNER JOIN categorias AS cat ON (cat.id = album.id_categoria)
  6. INNER JOIN usuarios AS usuario ON (usuario.id = album.id_usuario)
  7. INNER JOIN fotos_principales AS principal ON (album.id = principal.id_album)
  8. INNER JOIN fotos AS foto ON (principal.id_foto = foto.id)
  9. WHERE id_usuario != '1'
  10. ORDER BY album.id DESC
  11.  
  12. SELECT album.id, album.titulo, album.descripcion, album.id_usuario, album.creado, usuario.nombre, usuario.apellido, cat.categoria, foto.nombre_foto
  13. FROM albums AS album
  14. LEFT JOIN categorias AS cat ON (cat.id = album.id_categoria)
  15. LEFT JOIN usuarios AS usuario ON (usuario.id = album.id_usuario)
  16. LEFT JOIN fotos_principales AS principal ON (album.id = principal.id_album)
  17. LEFT JOIN fotos AS foto ON (principal.id_foto = foto.id)
  18. WHERE id_usuario = '1'
  19. ORDER BY album.id DESC

La consulta problematica a la que me refiero es la siguiente:

Código MySQL:
Ver original
  1. SELECT img.id, img.titulo, img.nombre_foto, img.tecnica, img.medidas , album.id AS id_album, album.titulo AS titulo_album, album.id_usuario AS id_autor , SUM(rate.puntaje) promedio, count(rate.puntaje) AS votos
  2. FROM fotos AS img
  3. LEFT JOIN puntuaciones AS rate ON img.id = rate.id_foto
  4. INNER JOIN albums AS album ON img.id_album = album.id
  5. GROUP BY img.id
  6. ORDER BY promedio DESC, votos DESC LIMIT 3

Quizás al tener más y más votos en las obras la consulta con sum() tarda mucho? Debería entonces almacenar un total en tabla aparte? La tabla puntuaciones es tipica: guarda el ip de la persona y el puntaje de uno a cinco que le da a una imagen.