`

OPTIMIZE TABLE 表碎片整理

阅读更多

转载:http://hi.baidu.com/icarusli/blog/item/14d04145ce73d134869473be.html

 

当库中删除了大量的数据后,可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。在做完批量删除,或定期(如每一两个月)进行一次数据表优化操作即可。

OPTIMIZE TABLE通过制作原来的表的一个临时副本来工作

OPTIMIZE TABLE语法:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

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

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

对于MyISAM表,OPTIMIZE TABLE按如下方式操作:

1.如果表已经删除或分解了行,则修复表。

2.如果未对索引页进行分类,则进行分类。

3.如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。

对于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE上。对于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,这会重建表。重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。请参见13.5.2.1节,“ANALYZE TABLE语法”。

使用—skip-new或—safe-mode选项可以启动mysqld。通过启动mysqld,您可以使OPTIMIZE TABLE对其它表类型起作用。

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

OPTIMIZE TABLE语句被写入到二进制日志中,除非使用了自选的NO_WRITE_TO_BINLOG关键词(或其别名LOCAL)。已经这么做了,因此,用于 MySQL服务器的OPTIMIZE TABLE命令的作用相当于一个复制主服务器,在默认情况下,这些命令将被复制到复制从属服务器中。

分享到:
评论

相关推荐

    探讨Mysql中OPTIMIZE TABLE的作用详解

    1. **碎片整理**: 当你从表中删除数据时,数据文件并不会立即收缩,而是会在数据文件中留下“碎片”——即已删除但未被重用的空间。`OPTIMIZE TABLE`可以清理这些碎片,从而使得新数据能够直接填充这些空闲空间,...

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

    当大量数据被删除或者频繁插入和删除操作后,使用`OPTIMIZE TABLE`可以有效地整理表结构,减少碎片。 使用`OPTIMIZE TABLE`的语法如下: ``` OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG | QUICK] TABLE `table_name` ``...

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

    优化表可以整理数据碎片,提高查询效率。 这个shell脚本通过定时任务(如cron job)执行,可以实现自动化的数据库维护。定时检查和优化MySQL表有助于保持数据库的最佳状态,避免因为数据问题导致的应用程序故障。 ...

    mysql 清碎片

    - InnoDB存储引擎默认不会通过简单的`OPTIMIZE TABLE`命令来清理碎片,因为它使用的是行级锁定机制,这种方式更适合频繁的并发操作。 - 若要清理InnoDB表的碎片,推荐的做法是创建一个新的表结构,并将旧表的数据...

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

    要清理因删除操作产生的数据碎片,官方推荐使用`OPTIMIZE TABLE`命令。这个命令会重建表,整理数据文件,回收被标记为删除但尚未使用的空间。执行`OPTIMIZE TABLE`后,可以使用`information_schema.tables`视图查询...

    数据库优化

    清理表空间碎片的方法主要有两种: 1. 对于MyISAM引擎的表,可以使用`OPTIMIZE TABLE`命令来整理碎片,如`OPTIMIZE TABLE testusers`。执行后,`Data_free`值将变为0,表示碎片已被清除。 2. 对于InnoDB引擎的表,`...

    MySQL 清除表空间碎片的实例详解

    2. **InnoDB表**:对于InnoDB,可以使用`ALTER TABLE 表名 ENGINE=InnoDB`来改变表的存储引擎,实际上也会执行一种形式的碎片整理。由于InnoDB的事务特性,这个过程可能会更复杂且耗时。 ### 清理建议 - 清理碎片...

    解析mysql 表中的碎片产生原因以及清理

    对于MyISAM表,可以通过OPTIMIZE TABLE或mysqlcheck工具进行碎片整理。对于InnoDB表,碎片清理相对复杂,可以通过重建表或者使用第三方工具来处理。在执行碎片整理操作时,务必要保证数据的安全,做好备份工作。正确...

    辛星杂谈之mysql中的数据碎片

    在数据库管理中,数据碎片是一...对于那些经常进行数据增删改查操作的数据库来说,定期的数据碎片整理尤为重要。同时,针对数据碎片的管理,也有必要制定一套完整、合理的数据库维护策略,以确保数据库长期高效地运行。

    一款信得过的磁盘碎片整理工具

    标签“磁盘整理工具比windows自带的安全而且快还保证质量”暗示了该第三方工具相较于Windows内置的磁盘碎片整理工具(Defragment and Optimize Drives)具有更高的性能和可靠性。这可能是因为它采用了更先进的算法,...

    MySQL中如何进行表的优化和压缩?

    这些工具可以进行表碎片整理、索引重建、数据压缩等操作,提高查询性能并减少存储空间的占用。 压缩表使用的存储空间 MySQL 提供了多种压缩表数据的技术。例如,InnoDB 引擎中的行压缩和页压缩,可以减少存储空间...

    MySQL优化表时提示 Table is already up to date的解决方法

    在MySQL数据库管理中,"优化表"(OPTIMIZE TABLE)是一项重要的维护任务,它用于整理表的数据和索引,以提高查询性能。然而,当你尝试优化一个表时,如果收到"Table is already up to date"的提示,这可能让你感到...

    MySQL优化全攻略-相关数据库命令

    再者,OPTIMIZE TABLE 是用来维护数据库健康状态的命令,它能恢复和整理磁盘空间,处理数据碎片。当你对包含变长行的表进行大量更新或删除操作后,运行 OPTIMIZE TABLE 可以显著改善表的读取速度,因为它会重新组织...

    mysql之delete删除记录后数据库大小不变

    综上所述,理解MySQL的`DELETE`操作及其对数据库大小的影响以及如何通过`OPTIMIZE TABLE`进行空间回收和碎片整理,对于数据库管理员和开发人员来说是至关重要的,有助于保持数据库的高效运行和合理空间使用。...

    MySQL_DBA非常完美的总结和基础文档

    此外,还能够对表进行碎片整理,以提高数据库性能。例如使用`OPTIMIZE TABLE table_name;`命令来整理表中的数据。 最后,需要指出的是,由于本篇文档是通过OCR技术从扫描的纸本文件中提取的文字内容,可能存在部分...

    MySQL的语句总结.

    表的碎片整理 ```sql OPTIMIZE TABLE table_name; ``` 这条命令用于整理表 `table_name` 的碎片。对于包含变长字段的表来说,这尤其有用。需要注意的是,执行此操作时,MySQL会锁定表,可能会导致性能下降。 ###...

    mysql 维护常用命令

    `OPTIMIZE TABLE`用于整理和优化表的物理结构,消除更新和删除操作产生的碎片。这对于MyISAM和InnoDB这两种常见的存储引擎都有效。定期运行`OPTIMIZE TABLE`可以提升查询性能。同样,可以通过`OPTIMIZE TABLE LOCAL...

Global site tag (gtag.js) - Google Analytics