CREATE DATABASE admin; USE admin; DROP TABLE IF EXISTS schema_stats_history; CREATE TABLE admin.schema_stats_history ( id INT AUTO_INCREMENT PRIMARY KEY, table_schema VARCHAR(64), table_name VARCHAR(64), stats_collected DATETIME, KEY (table_schema, table_name) ) ENGINE = MyISAM; DELIMITER // DROP PROCEDURE gather_schema_stats// CREATE DEFINER = root@localhost PROCEDURE gather_schema_stats(IN schema_name VARCHAR(64)) READS SQL DATA SQL SECURITY INVOKER BEGIN DECLARE done BOOL DEFAULT FALSE; DECLARE v_schema, v_table VARCHAR(64); DECLARE c_tables CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = schema_name; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; SET v_schema = schema_name; OPEN c_tables; analyzeTables:LOOP FETCH c_tables INTO v_table; IF done THEN CLOSE c_tables; LEAVE analyzeTables; END IF; SET @analyzeStmt:=CONCAT('ANALYZE TABLE ',v_schema,'.',v_table); PREPARE stmt FROM @analyzeStmt; EXECUTE stmt; DEALLOCATE PREPARE stmt; INSERT INTO schema_stats_history VALUES (NULL,v_schema, v_table, NOW()); END LOOP; END; // DELIMITER ; SET @schema:='test'; CALL gather_schema_stats(@schema); SELECT * FROM admin.schema_stats_history;