mysql中对数据库的每个表执行优化的存储过程
2013-10-14 09:19
781 查看
说明:此处为《高性能mysql(第二版)》中的示例代码,除了数据库名 其他未经更改。仅供学习及参考
对数据库的每个表执行优化的存储过程
CREATE PROCEDURE `inventory`.`optimize_table` (db_name VARCHAR(64))
BEGIN
DECLARE t VARCHAR(64);
DECLARE done INT DEFAULT 0;
DECLARE c CURSOR FOR
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA=db_name AND TABLE_TYPE='BASE TABLE';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN c;
tables_loop:LOOP
FETCH c INTO t;
IF done THEN
CLOSE c;
LEAVE tables_loop;
END IF;
SET @stmt_text:=CONCAT("OPTIMIZE TABLE ",db_name,'.',t);
PREPARE stmt FROM @stmt_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE c;
END
语句2:
CREATE PROCEDURE `inventory`.`optimize_tables2` (db_name VARCHAR(64))
BEGIN
DECLARE t VARCHAR(64);
DECLARE done INT DEFAULT 0;
DECLARE c CURSOR FOR
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA=db_name AND TABLE_TYPE='BASE TABLE';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN c;
REPEAT
FETCH c INTO t;
IF NOT done THEN
SET @stmt_text:=CONCAT("OPTIMIZE TABLE ",db_name,'.',t);
PREPARE stmt FROM @stmt_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
UNTIL done END REPEAT;
CLOSE c;
END
调用时为call optimize_tables2('库名');
或者
call optimize_tables('库名');
对数据库的每个表执行优化的存储过程
CREATE PROCEDURE `inventory`.`optimize_table` (db_name VARCHAR(64))
BEGIN
DECLARE t VARCHAR(64);
DECLARE done INT DEFAULT 0;
DECLARE c CURSOR FOR
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA=db_name AND TABLE_TYPE='BASE TABLE';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN c;
tables_loop:LOOP
FETCH c INTO t;
IF done THEN
CLOSE c;
LEAVE tables_loop;
END IF;
SET @stmt_text:=CONCAT("OPTIMIZE TABLE ",db_name,'.',t);
PREPARE stmt FROM @stmt_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE c;
END
语句2:
CREATE PROCEDURE `inventory`.`optimize_tables2` (db_name VARCHAR(64))
BEGIN
DECLARE t VARCHAR(64);
DECLARE done INT DEFAULT 0;
DECLARE c CURSOR FOR
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA=db_name AND TABLE_TYPE='BASE TABLE';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN c;
REPEAT
FETCH c INTO t;
IF NOT done THEN
SET @stmt_text:=CONCAT("OPTIMIZE TABLE ",db_name,'.',t);
PREPARE stmt FROM @stmt_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
UNTIL done END REPEAT;
CLOSE c;
END
调用时为call optimize_tables2('库名');
或者
call optimize_tables('库名');
相关文章推荐
- mysql中对数据库的每个表执行优化的存储过程
- mysql存储过程利用游标查询每个数据库的所有表
- 关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
- MySQL---数据库从入门走向大神系列(八)-在java中执行MySQL的存储过程
- MySql存储过程:查询数据库里每个表的最大id值
- MySQL存储过程详解 mysql 存储过程mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored
- sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
- sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
- mysql查看存储过程和执行sql脚本文件到数据库中
- php在执行mysql存储过程后执行其他数据库操作问题解决方法
- SQL监控:mysql及mssql数据库SQL执行过程监控审计
- DB Optimizer:数据库SQL代码分析调试优化,数据库存储过程优化,数据库负载测试
- mysql 存储过程动态执行sql 例子
- mysql 查询数据库中的存储过程与函数的语句
- mysql简单存储过程创建并返回执行结果
- MySql语句执行过程(从结构看优化)
- mysql 百万数据存储过程 查询优化技巧
- mysql,dos下执行SQL语句创建存储过程出错ERROR 1064 (42000):
- mysql 导入导出数据库以及函数、存储过程
- MySql中存储过程中的@变量总是无法执行,提示Parameter '@XXX' must be defined