说明:此处为《高性能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('库名');

mysql中对数据库的每个表执行优化的存储过程的更多相关文章

  1. C# 利用mysql.data 在mysql中创建数据库及数据表

    C# 利用mysql.data 在mysql中创建数据库及数据表 using System; using System.Collections.Generic; using System.Linq; ...

  2. 在mysql中生成数据库和数据表

    #创建数据库CREATE DATABASE s4day65 DEFAULT CHARSET utf8; #班级表 CREATE TABLE class (id INT NOT NULL AUTO_IN ...

  3. MySQL 中的数据库名称、数据表名称、字段名称

    如何查询Oracle,Sql Server,MySQL 中的数据库名称.数据表名称.字段名称 分类: Database2012-09-24 22:16 7034人阅读 评论(0) 收藏 举报 数据库s ...

  4. mysql中kill掉所有锁表的进程

    --mysql中kill掉所有锁表的进程 --------------------------------2014/05/20 在数据库的管理中,我们经常会碰到锁表的问题,看一下进程列表. mysql ...

  5. MySQL中select * for update锁表的范围

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  6. MySQL中select * for update锁表的问题

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  7. MySQL开发——【数据库、数据表的基本操作】

    启动MySQL服务器端 CMD启动MySQL服务器端 net start(启动)|stop(停止)|restart(重启)服务名称(mysql) 连接MySQL服务器端 CMD连接MySQL服务器端 ...

  8. mysql 导入导出数据库、数据表的方法

    mysql 导入导出数据库.数据表的方法. Linux操作系统中,均在控制台下操作.1,导入数据库:前提:数据库和数据表要存在(已经被创建)(1)将数据表 test_user.sql 导入到test ...

  9. MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNI ...

随机推荐

  1. [jobdu]丑数

    由于思维的惯性,用了queue.后来发现一要注意要用集合判重,二是每次往queue里放的多,后来溢出了,要用long long.但这样要用数组,集合,队列,内存多.效率是O(n*logn)的. #in ...

  2. Altium Designer 特定网络取消 remove loops

    在使用Altium Designer时,在PCB Editor 里面可以设定是否需要Automatically remove Loops,但是这个设置是全局的,在设计时难免会遇到对大部分网络是需要删除 ...

  3. 判断微信内置浏览器的UserAgent

    要区分用户是通过"微信内置浏览器"还是"原生浏览器"打开的WebApp, 可以通过navigator.userAgent来进行判断. 以下是对各种平台上微信内置 ...

  4. 期待已久的2012年度最佳jQuery插件揭晓

    近日,国外著名博客WDL发布了2012年度最佳 jQuery 插件.jQuery 自2006年发布以来,经过6年的迅速发展,目前已是最流行和使用最广泛的 JavaScript 框架,这主要归功于众多围 ...

  5. Ubuntu Broadcom无线网卡驱动安装

    刚装的Ubuntu,发现Broadcom无线网卡没工作, 原来手贱,在liveCD 把wireless禁用了,  ubuntu所以认为你机器,没有wireless模块,所以就没有安装wireless驱 ...

  6. Async callback to awaitable Task<> z

    http://blog.tedd.no/2013/09/13/async-callback-to-awaitable-task/ The Async-Await feature in .Net is ...

  7. 安装tcpreplay时报错:configure: error: libdnet not found

    安装tcpreplay时报错configure: error: libdnet not found 解决方法: 下载包libdnet-1.8.tar.gz并安装,依次执行: ./configure m ...

  8. [codevs3295]落单的数

    题目描述 Description 有n个数(n是奇数),其中n-1个数两两成对,有1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度 输入描述 Input Description ...

  9. Sublime Text 2使用心得

    一个比较详细的文章:http://www.cnblogs.com/figure9/p/sublime-text-complete-guide.html 一. 前言 作为一个前端,有一款好的开发利器是必 ...

  10. Java笔记(十五)……面向对象IV多态(polymorphism)

    概述 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物. 动物 y = new 猫(); 动 ...