本文收集于本人的笔记本,由于找不到原文出处。在此省略,如哪位知道可以联系我加上。

核心是利用mysql系统表和“optimize table 表名”命令,对mysql数据表进行空间的释放。由于delete和drop table都不会释放表空间(truncate 命令会释放表空间【将所有的数据都删除】),所以需要利用optimize 命令进行释放。

这个存储过程目的是给一个库的所有表来整理碎片的。一个表随着插入很频繁,或者一直更新不停的,就会积累好多碎片。如果及时整理一下,查询效率会高出好多。

DELIMITER $$

DROP PROCEDURE IF EXISTS `mysql`.`sp_optimize_tables`$$

CREATE PROCEDURE `mysql`.`sp_optimize_tables`(
IN db_name varchar(255))
BEGIN
-- Created by david yeung 20080128. -- To optimize all the tables in exact database. declare cnt int default 0;
declare i int default 0;
select count(*) as total from information_schema.tables where table_schema = db_name into cnt;
while i < cnt
do
-- Get the table's exact name.
set @stmt = concat('select table_name from information_schema.tables where table_schema = ''',db_name,''' order by table_name asc limit ',i,',1 into @tb_name');
prepare s1 from @stmt;
execute s1;
drop prepare s1;
set @stmt = '';
set @stmt = concat('optimize table ',db_name,'.',@tb_name);
prepare s1 from @stmt;
execute s1;
drop prepare s1;
set @stmt = '';
set i = i + 1;
end while;
-- Refresh tables. flush tables;
END$$ DELIMITER ;

调用示例:

mysql> use mysql
Database changed
mysql> call sp_optimize_tables('david_test');
+------------------------------+----------+----------+----------+
| Table                        | Op       | Msg_type | Msg_text |
+------------------------------+----------+----------+----------+
| david_test.test1 | optimize | status   | OK       |
+------------------------------+----------+----------+----------+
1 row in set (0.26 sec)

+--------------------------+----------+----------+----------+
| Table                    | Op       | Msg_type | Msg_text |
+--------------------------+----------+----------+----------+
| david_test.test2| optimize | status   | OK       |
+--------------------------+----------+----------+----------+
1 row in set (0.35 sec)

+---------------------------------------+----------+----------+----------+
| Table                                 | Op       | Msg_type | Msg_text |
+---------------------------------------+----------+----------+----------+
| david_test.test3 | optimize | status   | OK       |
+---------------------------------------+----------+----------+----------+
1 row in set (0.45 sec)

+--------------------------+----------+----------+----------+
| Table                    | Op       | Msg_type | Msg_text |
+--------------------------+----------+----------+----------+
| david_test.test_article | optimize | status   | OK       |
+--------------------------+----------+----------+----------+
1 row in set (4.13 sec)

...

+----------------------------------+----------+----------+----------+
| Table                            | Op       | Msg_type | Msg_text |
+----------------------------------+----------+----------+----------+
| david_test.test_article_content | optimize | status   | OK       |
+----------------------------------+----------+----------+----------+
1 row in set (37.81 sec)

+-----------------------+----------+----------+----------+
| Table                 | Op       | Msg_type | Msg_text |
+-----------------------+----------+----------+----------+
| david_test.members | optimize | status   | OK       |
+-----------------------+----------+----------+----------+
1 row in set (40.02 sec)

+--------------------+----------+----------+----------+
| Table              | Op       | Msg_type | Msg_text |
+--------------------+----------+----------+----------+
| david_test.test_site | optimize | status   | OK       |
+--------------------+----------+----------+----------+
1 row in set (40.31 sec)

+--------------+----------+----------+----------+
| Table        | Op       | Msg_type | Msg_text |
+--------------+----------+----------+----------+
| david_test.t | optimize | status   | OK       |
+--------------+----------+----------+----------+
1 row in set (41.10 sec)

Query OK, 0 rows affected (41.13 sec)

【转】利用optimize、存储过程和系统表对mysql数据库表进行批量碎片清理释放表空间的更多相关文章

  1. 利用PowerDesigner15在win7系统下对MySQL 进行反向project(二)

    利用PowerDesigner15在win7系统下对MySQL 进行反向project 1.打开PowerDesigner,建立新模型.选择Physical Data Model中的Physical ...

  2. 利用PowerDesigner15在win7系统下对MySQL 进行反向工程(三)

    利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.选择"数据库-->Generate Database...",查看数据库表的SQL语句 2. ...

  3. 利用PowerDesigner15在win7系统下对MySQL 进行反向工程(二)

    利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.打开PowerDesigner,建立新模型,选择Physical Data Model中的Physical Da.. ...

  4. 利用PowerDesigner15在win7系统下对MySQL 进行反向工程(一)

    利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.首先,安装以下的驱动 2.找到"C:\Windows\System32" 3.双击"od ...

  5. 利用workbench对linux/Ubuntu系统中的mysql数据库进行操作

    在上一篇文章中,我分享了在linux中如何安装mysql数据库,但是这只是安装了mysql的服务,并没有图形化管理界面,所以这样子操作起来并没有那么方便,那么现在我们就来实现如何利用在window中安 ...

  6. CentOS 6.5系统上安装MySQL数据库

    1.查看系统是否安装了MySQL      使用命令:      #rpm -qa | grep mysql 2.卸载已安装的MySQL       卸载mysql命令如下:        #rpm ...

  7. linux/Ubuntu系统上安装mysql数据库(附图详解)

    在前面的文章中,我已经分享了如何在Ubuntu系统中安装以及搭建java开发环境,那么当我们需要跟数据打交道的时候,那么就需要在ubuntu系统中安装一个数据库了,那么废话就不多说了,我们这里主要是分 ...

  8. MySQL中 如何查询表名中包含某字段的表 ,查询MySql数据库架构信息:数据库,表,表字段

    --查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where ta ...

  9. 【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)

    上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完 ...

随机推荐

  1. 【HDU 3966】Aragorn's Story(未完待续)

    我无限Runtime Error(ACCESS_VIOLATION).不知道怎么搞得/(ㄒoㄒ)/~~ #pragma comment(linker, "/STACK:1024000000, ...

  2. Maven-在eclipse创建maven项目

    在eclipse使用maven则需要给eclipse安装maven插件,具体安装maven插件安装相关文章 构建Maven项目 以eclipse3.6为例 1)创建简单Maven项目 点击Eclips ...

  3. C语言+SDL2 图形化编程

    程设大作业小火车第一版本是命令行界面,第二版本是图形化界面,由于egg库对以后工程开发没有用,我不想用egg库,花了很长时间浏览了一下OpenGL的中文教程,觉得好复杂,需要看很多很多才能写出个简单的 ...

  4. CentOS下crontab执行java程序

    阿里云CentOS收不到邮件 在crontab里配置执行脚本,脚本用来执行java程序,死活不执行.单独执行脚本可以运行. 查看crontab的日志文件,/var/log/cron,发现没有收到cro ...

  5. 洛谷P2327 [SCOI2005] 扫雷

    题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输 ...

  6. 802.11协议帧格式、Wi-Fi连接交互过程、无线破解入门研究

    相关学习资料 Linux黑客大曝光: 第8章 无线网络 无线网络安全攻防实战进阶 无线网络安全 黑客大曝光 第2版 http://zh.wikipedia.org/wiki/IEEE_802.11 h ...

  7. maven加载spring包

    <dependencies> <dependency> <groupId>org.springframework</groupId> <artif ...

  8. 如何在 Arch Linux 的终端里设定 WiFi 网络

    如果你使用的是其他 Linux 发行版 而不是 Arch CLI,那么可能会不习惯在终端里设置 WiFi.尽管整个过程有点简单,不过我还是要讲一下.在这篇文章里,我将带领新手们通过一步步的设置向导,把 ...

  9. 深入浅出Redis01安装

    一 什么是Redis? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是一个高性能的Key-Va ...

  10. Maven学习笔记-01-Maven入门

    一 Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1  项 ...