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

Lentitud en Consulta PHP Mysql

Estas en el tema de Lentitud en Consulta PHP Mysql en el foro de Mysql en Foros del Web. Hola chicos, Hace unos dias creé un sistema de top de usuarios, en la cual inserto la lista de usuarios y el numero de pocision ...
  #1 (permalink)  
Antiguo 19/01/2012, 18:54
Avatar de MDJProdMusic  
Fecha de Ingreso: abril-2011
Ubicación: Antofagasta, Chile
Mensajes: 36
Antigüedad: 13 años
Puntos: 0
Pregunta Lentitud en Consulta PHP Mysql

Hola chicos,

Hace unos dias creé un sistema de top de usuarios, en la cual inserto la lista de usuarios y el numero de pocision de cada uno en una tabla llamada "ranking" en la que solo tiene esos 2 campos: nick | posicion

La posicion la obtengo de una enumeración $n++; ingresando el usuario con un insert y la pocision con un update.

Pero resulta que esta operacion para actualizar las posiciones del ranking me dejó muy lenta la pagina al cargar, si retiro el codigo de actualizacion de posicion demora 3 segundos en cargar la lista completa de usuarios (pero no se acutalizaran las posiciones).. Si inserto el codigo de actualizacion de posicion demora 40 a 50 segundos la carga de la pagina.

Este es el codigo completo, desde la consulta hasta el cierre con el inser y update:
Código PHP:
<?php
include('conexion.php') ;
$n=1;
$sql "SELECT nick, COUNT(*) AS cantidad FROM
(select nick from audio union all
select nick from video union all
select nick from imagen union all
select nick from otros) A GROUP BY nick order by cantidad desc"
;
$result mysql_query($sql) or die(mysql_error());
while(
$row mysql_fetch_array($result))

?>

<? echo $n?> <? echo $row[nick]; ?> <? echo $row[cantidad]; ?>

<?
$posicion 
$n;
$n++;
mysql_query("INSERT INTO ranking (nick) VALUES ('$row[nick]')");
$query "UPDATE ranking SET posicion = '$posicion' WHERE nick = '$row[nick]'";
mysql_query($query);
?>
Asi tal como está demora entre 40 a 50 segundos en cargar la lista.
Pero si cierro la llave sin actualizar los datos en la db carga en 3 segundos, es decir, cerrar asi:
Código PHP:
<?
$n
++;
}
 
?>
Asi me carga velozmente, pero no me actualiza las posiciones de cada usuario del top, alguien sabe otra forma de actualizar posiciones de una manera automatica, asi no estar actualizando esa pagina para poder hacer el cambio.

Cita:
Obviamente la posicion en la lista es automatica por la enumeracion, pero tengo que tenerla en base de datos para visualizar la posición en el perfil del usuario.
Gracias de antemano
__________________
http://www.chiledj.cl
  #2 (permalink)  
Antiguo 20/01/2012, 03:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Lentitud en Consulta PHP Mysql

No es problema de MySQL, replante tu PHP

Puedes mostrar un ranking sin guardarlo en ninguna parte usando un for (X=0;X<count($rows);X++) no while y buscar la X+1 que le corresponderia a cada nikc. Pero esto es PHP y estamos en el foro de MySql.

O si la tabla ranking tiene como PK el nick pudes usar ON DUPLICATE KEY UPDATE...con lo que solo tendras que ejecutar una query en la segunda parte de tu script....

Pero!!! No tinen ningun sentido almacenar un dato que tendrás que actualizar cada vez que lo quieras consultar.... no te parece...Cuando quieras mostrar el perfil de alguien consulta el ranking que tendria en ese momento y muestralo no hace falta guardarlo ya que teoricamente tendrias que consultarlo continuamente para que siempre este actualizado...

Ese dato depende de otros guardados en la bbdd por lo que estarás incumpliendo las normas basicas de una base de datos relacional....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 20/01/2012 a las 04:07
  #3 (permalink)  
Antiguo 20/01/2012, 08:53
Avatar de MDJProdMusic  
Fecha de Ingreso: abril-2011
Ubicación: Antofagasta, Chile
Mensajes: 36
Antigüedad: 13 años
Puntos: 0
Respuesta: Lentitud en Consulta PHP Mysql

Cita:
Iniciado por quimfv Ver Mensaje
No es problema de MySQL, replante tu PHP

Puedes mostrar un ranking sin guardarlo en ninguna parte usando un for (X=0;X<count($rows);X++) no while y buscar la X+1 que le corresponderia a cada nikc. Pero esto es PHP y estamos en el foro de MySql.

O si la tabla ranking tiene como PK el nick pudes usar ON DUPLICATE KEY UPDATE...con lo que solo tendras que ejecutar una query en la segunda parte de tu script....

Pero!!! No tinen ningun sentido almacenar un dato que tendrás que actualizar cada vez que lo quieras consultar.... no te parece...Cuando quieras mostrar el perfil de alguien consulta el ranking que tendria en ese momento y muestralo no hace falta guardarlo ya que teoricamente tendrias que consultarlo continuamente para que siempre este actualizado...

Ese dato depende de otros guardados en la bbdd por lo que estarás incumpliendo las normas basicas de una base de datos relacional....
Muchas Gracias :)
__________________
http://www.chiledj.cl
  #4 (permalink)  
Antiguo 22/01/2012, 23:23
 
Fecha de Ingreso: mayo-2011
Ubicación: sinaloa
Mensajes: 150
Antigüedad: 13 años
Puntos: 4
Respuesta: Lentitud en Consulta PHP Mysql

Poes si puede ser del MYSQL, estas realizando 5 CONSULTAS :S :S :S....

No estas sacando probecho al SELECT. todo lo que haces lo puedes hacer en 1 solo SELECT....
  #5 (permalink)  
Antiguo 25/01/2012, 12:49
Avatar de MDJProdMusic  
Fecha de Ingreso: abril-2011
Ubicación: Antofagasta, Chile
Mensajes: 36
Antigüedad: 13 años
Puntos: 0
Respuesta: Lentitud en Consulta PHP Mysql

Cita:
Iniciado por yoniti7784 Ver Mensaje
Poes si puede ser del MYSQL, estas realizando 5 CONSULTAS :S :S :S....

No estas sacando probecho al SELECT. todo lo que haces lo puedes hacer en 1 solo SELECT....

Como puedo hacerlo en uno solo?
__________________
http://www.chiledj.cl
  #6 (permalink)  
Antiguo 26/01/2012, 03:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Lentitud en Consulta PHP Mysql

La solución es la que te comento de php solo tendrás que lanzar la primera consulta... la cual te da el ranking en el momento, no necesitas guardarlo, es un valor que puede variar constantemente luego no tiene sentido guardarlo... incluso puede que varie en los milisegundos que tarde en mostrarse ya que otros usuarios pueden estar interactuando con la bbdd y por tanto modificando el ranking al mismo tiempo que lo estas mostrando....si encima lo retrasas todo guardando un valor que caduca al instante....

Otro tema seria replantear el diseño de tal fomar que en vez de tener que usar esos union la actividad de los usuarios quedara registrada en una sola tabla, la qual tendira que tener un campo llamado tipo donde se guarde si es audio,video,imagen u otros. Esa hipotetica tabla apoyada en un indice sobre el nick seguro que seria mas rápida de consultar... pero eso es entrar en tu negocio y solo tu sabes si un esquema como el que te comento podria funcionar.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 26/01/2012 a las 03:13

Etiquetas: campos, lentitud, php, query, 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




La zona horaria es GMT -6. Ahora son las 09:42.