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