• mysql中对数据库的每个表执行优化的存储过程


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

  • 相关阅读:
    用chardet判断字符编码的方法
    NLP--edit distance
    nfc是什么?nfc功能是什么?
    【转载】推荐系统的十大挑战
    python--网络爬虫一
    【转载】双调欧几里得距离的算法原理
    Java并发编程:线程池的使用
    Java集合--HashMap源码剖析
    java中集合类详解
    java collection接口源码
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3367656.html
Copyright © 2020-2023  润新知