martes, 25 de enero de 2011

Siguiendo con el tema de Store procedure de MySql, ahora lo que vamos a crear es un procedimiento para actualizar las estadísticas de MySql.

He leído un poco sobre las estadísticas sobre MySql, y el resumen seria que se debe de ejecutar cuando se borran o agregan muchos datos de una tabla (sobre todo si esta tiene muchos registros).

La teoría la tengo clara pero no les puedo confirmar si el actualizar las estadísticas realmente mejora la performance de la aplicación, es decir teóricamente lo debería de hacer, pero no he podido detectar fehacientemente que esto sea asi, las bases que yo trabajo de desarrollo son de muy pocos datos, y las bases de producción que lo he corrido los usuarios no me dijeron si anda mas rápido o no (tampoco se los pregunte para no obtener una respuesta negativa por el solo hecho de preguntarlo).

Bueno ahora con lo interesante, abajo pongo el procedimiento.

DELIMITER $$

DROP PROCEDURE IF EXISTS `estadisicas` $$

CREATE DEFINER=`root`@`%` PROCEDURE `estadisicas`(in base varchar(50))

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE tabla VARCHAR (50);

DECLARE cursor1 CURSOR FOR SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=base;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cursor1;

REPEAT

FETCH cursor1 INTO tabla;

IF NOT done THEN

SET @ddl = CONCAT('ANALYZE TABLE ', tabla, ';');

PREPARE STMT FROM @ddl;

EXECUTE STMT;

END IF;

UNTIL done END REPEAT;

CLOSE cursor1;

OPEN cursor1;

REPEAT

FETCH cursor1 INTO tabla;

IF NOT done THEN

SET @ddl = CONCAT('OPTIMIZE TABLE ', tabla, ';');

PREPARE STMT FROM @ddl;

EXECUTE STMT;

END IF;

UNTIL done END REPEAT;

CLOSE cursor1;

END $$

DELIMITER ;

* El parámetros que recibe es: nombre de la base. Para ejecutarlo simplemente hay que correr desde el browser lo siguiente:

CALL estadisticas('mibase');


Lo que estamos utilizando son 2 sentencias MySql, que son ANALYZE y OPTIMIZE .

No hay comentarios: