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 
  
 
