zoukankan      html  css  js  c++  java
  • optimize table tablename

    optimize 优化表
    OPTIMIZE 命令支持的引擎MyIsam, InnoDB, ARCHVE
    当对表有大量的增删改操作时,需要用optimize对表进行优化,可以减少空间与提高I/O性能,
    命令optimize table tablename;

    1.假如有session表且存储引擎为MyISAM
    mysql> OPTIMIZE TABLE session;
    +--------------+----------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +--------------+----------+----------+----------+
    | test.session | optimize | status | OK |
    +--------------+----------+----------+----------+
    1 row in set
    2.如果是InnoDB引擎
    首先查看innodb_file_per_table(是否独享表空间)。
    mysql> show variables like 'innodb_file_per_table';
    +-----------------------+-------+
    | Variable_name | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON |
    +-----------------------+-------+
    1 row in set
    on表示打开了
    OFF代表开启共享表空间没有打开
    即采用的是默认的共享表空间
    这个时候可以在mysql的datadir路径下看到一个非常大的文件ibdata1,
    这个文件存储了所有InnoDB表的数据与索引
    如果开启了独享表空间,即每张表都有ibdfile,这个时候如果删除了大量的行,索引会重组并且会释放相应的空间因此不必优化
    由于共享表空间所有表的数据与索引都存放于ibddata1文件中
    随着数据量的增长会导致该文件越来越大,超过10G的时候查询速度就非常慢,因此在编译的时候最好开启独享表空间,因为mysql默认是关闭了独享表空间
    下面有两个解决方案
    方案一:先逻辑备份所有的数据库,将配置文件中innodb_file_per_table参数=1,再将备份导入
    方案二:只要修改innodb_file_per_table参数,然后将需要修改的所有innodb的表都运行一遍
    alter table table_name engine=innodb;
    即可使用第二种方式修改后,原来库中的表中的数据会继续存放于ibdata1中,
    新建的表才会使用独立表空间

    stu是innodb
    mysql> OPTIMIZE TABLE stu;
    +----------+----------+----------+-------------------------------------------------------------------+
    | Table | Op | Msg_type | Msg_text |
    +----------+----------+----------+-------------------------------------------------------------------+
    | test.stu | optimize | note | Table does not support optimize, doing recreate + analyze instead |
    | test.stu | optimize | status | OK |
    +----------+----------+----------+-------------------------------------------------------------------+
    2 rows in set
    这时需要
    mysql> alter table stu engine='innodb';
    Query OK, 0 rows affected
    Records: 0 Duplicates: 0 Warnings: 0

    mysql> analyze table stu;
    +----------+---------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +----------+---------+----------+----------+
    | test.stu | analyze | status | OK |
    +----------+---------+----------+----------+
    1 row in set
    来优化表

  • 相关阅读:
    Python进阶: Decorator 装饰器你太美
    计算机网络自顶向下方法第3章-传输层 (Transport Layer).2
    Python进阶:值传递,引用传递?不存在的,是赋值传递
    Python进阶:对象复制与比较,分深浅,见真假
    Python基础:模块化来搭项目
    这说明一个问题
    我稍微思考了一下
    由LruCache和DiskLruCache提供三级缓存支持的ImageLoader
    回忆一个加塞方法
    三年六班的李子明同学,你妈拿了两本计算机基础在二号树上等你
  • 原文地址:https://www.cnblogs.com/HKUI/p/5453502.html
Copyright © 2011-2022 走看看