`

mysql中OPTIMIZE TABLE的作用

 
阅读更多

1、先来看看多次删除插入操作后的表索引情况

mysql> SHOW INDEX FROM `tbl_name`;
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tbl_name | 0 | PRIMARY | 1 | StepID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | FlowID | 1 | FlowID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerCount | 1 | WagerCount | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 1 | WagerID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 2 | StepType | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 3 | ParamResult | A | 1 | 255 | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 1 | StepType | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 2 | ParamResult | A | 1 | 255 | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 1 | WagerID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 2 | StepType | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 3 | ParamResult | A | 1 | 255 | NULL | | BTREE | |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
11 rows in set (0.01 sec)

2、优化表

mysql> optimize table tbl_name;
+---------------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------+----------+----------+----------+
| test.tbl_name | optimize | status | OK |
+---------------+----------+----------+----------+
1 row in set (40.60 sec)

3、再来看看优化后的效果

mysql> SHOW INDEX FROM `tbl_name`;
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tbl_name | 0 | PRIMARY | 1 | StepID | A | 172462 | NULL | NULL | | BTREE | |
| tbl_name | 1 | FlowID | 1 | FlowID | A | 86231 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerCount | 1 | WagerCount | A | 4311 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 1 | WagerID | A | 86231 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 2 | StepType | A | 172462 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 3 | ParamResult | A | 172462 | 255 | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 1 | StepType | A | 9 | NULL | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 2 | ParamResult | A | 86231 | 255 | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 1 | WagerID | A | 86231 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 2 | StepType | A | 172462 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 3 | ParamResult | A | 172462 | 255 | NULL | | BTREE | |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

最后,来看看手册中关于 OPTIMIZE 的描述:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用
OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新
利用未使用的空间,并整理数据文件的碎片。

在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次
即可,只对特定的表运行。

OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。
分享到:
评论

相关推荐

    探讨Mysql中OPTIMIZE TABLE的作用详解

    MySQL中的`OPTIMIZE TABLE`命令是一个非常实用的数据库维护工具,主要用于优化和整理数据库表,尤其是在大量数据操作之后。此命令的主要目标是提高查询性能、减少磁盘空间占用以及更新表统计信息。以下是对`OPTIMIZE...

    mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)

    在MySQL数据库管理中,...总结来说,了解并熟练使用 `REPAIR TABLE` 和 `OPTIMIZE TABLE` 命令是MySQL数据库管理员的基本技能。通过合理使用这些工具,结合其他数据库优化策略,可以有效地维护数据库的稳定性和性能。

    实现MySQL定时批量检查表repair和优化表optimize table的shell脚本

    MySQL数据库在长期运行过程中,可能会出现数据碎片、索引损坏等问题,这可能影响数据库的性能。为确保数据库的稳定性和高效运行,定期进行表的检查(check table)和优化(optimize table)是必要的。本篇文章将详细...

    Mysql InnoDB删除数据后释放磁盘空间的方法

    执行此命令后,可能会收到一个提示:“Table does not support optimize, doing recreate + analyze instead”,但这并不意味着优化失败,实际上,它已经成功地完成了空间的回收。 如果在创建数据库时没有设置`...

    MySQL 中如何优化表释放表空间

    在MySQL数据库管理中,释放表空间是维护数据库性能和存储效率的重要环节,特别是对于大型数据库而言。本篇文章将深入探讨两种常见的优化表以释放表空间的方法,并提供相关的注意事项和实践技巧。 方法一:`OPTIMIZE...

    MySQL中文参考手册.chm

    7.9 OPTIMIZE TABLE (优化表) 句法 7.10 DROP TABLE (抛弃表)句法 7.11 DELETE (删除)句法 7.12 SELECT (精选)句法 7.13 JOIN (联接)句法 7.14 INSERT (插入)句法 7.15 REPLACE ...

    MYSQL命令大全与MySQl中文手册CHM版最新版本

    为了优化数据库性能,还需要学习一些数据库管理命令,如EXPLAIN分析查询,SHOW TABLE STATUS查看表状态,OPTIMIZE TABLE优化表等。这些命令能够帮助我们更好地理解MySQL的内部机制和优化查询效率。 安全性是数据库...

    MySQL中文参考手册

    + 1.2.1 本手册中使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o 1.8 有用的MySQL相关链接 * 2 MySQL 邮件列表及如何提问或报告错误...

    mysql-table_insertsql.zip

    本资料"mysql-table_insertsql.zip"显然关注的是在MySQL中创建大表以及如何有效地插入数据,这在性能测试和数据加载场景中尤为关键。 首先,让我们深入理解“建表”这个概念。在MySQL中,创建表是通过SQL语句`...

    实战mysql innodb 删除数据后释放磁盘

    InnoDB 是 MySQL 中的一种存储引擎,它具有高性能和可靠性的特点。然而,在 InnoDB 中,删除数据后,并不会真正释放磁盘空间,而是将其标记为删除。这就导致 InnoDB 数据库文件不断增长,极大地浪费了磁盘空间。 ...

    mysql面试题30道

    MySQL 中可以使用 OPTIMIZE TABLE 语句来优化表的存储结构,使用 COMPRESS 语句来压缩表的数据。 MySQL 中如何进行高可用和容灾的设计? MySQL 中可以使用主从复制(Master-Slave Replication)、负载均衡(Load ...

    mysql dba 常用脚本

    4. 表维护:包括表的优化(如`OPTIMIZE TABLE`)、重建索引(`ALTER TABLE ... REBUILD INDEX`)、检查和修复表(`CHECK TABLE`, `REPAIR TABLE`)等。 5. 查询性能分析:`EXPLAIN`关键字用于分析查询执行计划,...

    mysqlcheck.exe 修复mysql数据库

    mysqlcheck -u root -p --password=<your_password> --repair database_name table_name ``` 在实际操作中,务必谨慎使用`mysqlcheck.exe`,因为它可能会修改数据,所以在执行修复或优化之前,最好先备份重要的...

    mysql 清碎片

    在MySQL数据库中,随着数据的不断增删改查操作,尤其是大量的删除操作后,数据库表中的存储空间会出现“碎片化”的现象。所谓的“碎片”,是指在数据库表中存在的一些未被完全利用或未被有效管理的小块空闲空间。...

    mysql 学习中 和大家分享一下

    - `OPTIMIZE TABLE`用于整理表数据,减少碎片,改善查询速度。 - `PROCEDURE ANALYSE()`函数用于显示查询的执行统计信息,帮助优化查询性能。 通过以上总结,我们可以看到MySQL提供了丰富的功能来支持数据管理、...

    mysql命令大全

    - `OPTIMIZE TABLE table_name;`:优化表`table_name`,用于回收未使用的空间,提高查询性能。 - **使用 PROCEDURE ANALYSE() 分析存储过程**: - `SELECT * FROM students PROCEDURE ANALYSE();`:分析存储过程...

    MYSQL

    7.6 DROP DATABASE (抛弃数据库)句法 7.7 CREATE TABLE (创建表)句法 7.7.1 隐含(silent)的列指定变化 7.8 ALTER TABLE (改变表)句法 7.9 OPTIMIZE TABLE (优化表) 句法 7.10 DROP TABLE ...

Global site tag (gtag.js) - Google Analytics