Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2008, 10:57
pendejo1983
 
Fecha de Ingreso: noviembre-2007
Mensajes: 163
Antigüedad: 16 años, 5 meses
Puntos: 0
Velocidad de procedimiento

Hola, tengo un procedimiento al que le cuesta una barbaridad ejecutarse y no tengo idea de porque ya que creo tener los índices correctos, el código es el siguiente:

DELIMITER $$

DROP PROCEDURE IF EXISTS `ASIGNA_POS_MR` $$
CREATE PROCEDURE `ASIGNA_POS_MR` ()
BEGIN
DECLARE done INT DEFAULT 0;
declare pos INT;
declare id INT;
DECLARE cur1 CURSOR FOR select @rownum:=@rownum+1 rownum, t.idjug
from jugador t, (SELECT @rownum:=0) r
order by t.mr desc;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

update jugador set pos_mr = 0;
commit;

open cur1;

REPEAT
FETCH cur1 INTO pos, id;
update jugador set pos_mr = pos where idjug = id;
commit; (el commit lo he metido aqui para ver en 1 minuto cuantos hace, pero poneidno fuera del repeat-until, donde deberá ir, la velocidad es igual de baja)
UNTIL done END REPEAT;

CLOSE cur1;


END $$

DELIMITER ;

La tabla jugador tiene 80.000 registros. idjug es clave primaria y uno de los índices que tiene la tabla es sobre mr.

La cuestión es que en 1 minuto no hace nada mas que 200 registros y no veo el porque, cualquier idea sería bienvenida