mysql optimize整理表碎片

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

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。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。

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

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

1. 如果表已经删除或分解了行,则修复表。
2. 如果未对索引页进行分类,则进行分类。
3. 如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。

对于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE上

对于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,这会重建表。重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。

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

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

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

时间: 2024-08-09 02:19:20

mysql optimize整理表碎片的相关文章

Oracle 数据库整理表碎片

Oracle 数据库整理表碎片 转载:http://kyle.xlau.org/posts/table-fragmentation.html 表碎片的来源 当针对一个表的删除操作很多时,表会产生大量碎片.删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用. 怎样确定是否有表碎片 -- 收集表统计信息 SQL> exec dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=> 'TABLE_NAME'); -

mysql 批量删数据并且整理表碎片

DROP PROCEDURE IF EXISTS prc_del_loop;CREATE PROCEDURE prc_del_loop()BEGINDECLARE v_count INT ;DECLARE v_data_free INT;my_del_loop:LOOP delete from t_data where adress = '苏州日志分析苏州日志分析' limit 10000;select count(1) into v_count from (select * from t_da

表碎片

SQL> SELECT TABLE_NAME,  (BLOCKS * 8192 / 1024 / 1024) -  (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB" FROM USER_TABLES  WHERE table_name = 'T1'; TABLE_NAME           Data lower than HWM in MB -------------------- ------

MySQL关于表碎片整理OPTIMIZE TABLE操作

MySQL关于表碎片整理OPTIMIZE TABLE操作的官方建议1.MySQL官方建议不要经常(每小时或每天)进行碎片整理,一般根据实际情况,只需要每周或者每月整理一次即可,可以写成定时任务来做.2.OPTIMIZE TABLE只对MyISAM,BDB和InnoDB表起作用,尤其是MyISAM表的作用最为明显.此外,并不是所有表都需要进行碎片整理,一般只需要对包含上述可变长度的文本数据类型的表进行整理即可.3.在OPTIMIZE TABLE运行过程中,MySQL会锁定表.4.默认情况下,直接对

MySQL数据表碎片整理

在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作--MySQL数据表碎片整理. 那么,为什么在使用这些数据类型之后,我们就要对MySQL定期进行碎片整理呢? 现在,我们先来看一个具体的例子.在这里,我们使用如下SQL语句在MySQL自带的TEST数据库中创建名为DEMO的数据表并插入5条测试数据. --创建DEMO表  id int unsigned,  body text  ) engine

Mysql Innodb 表碎片整理

一.为什么会产生碎片 简单的说,删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,这种是数据碎片.实际上数据碎片分为两种,一种是单行数据碎片,另一种是多行数据碎片.前者的意思就是一行数据,被分成N个片段,存储在N个位置.后者的就是多行数据并未按照逻辑上的顺序排列.当有大量的删除和插入操作时,必然会产生很多未使用的空白空间,这些空间就是多出来的额外空间.索引也是文件数据,所以也会产生索

mysql表碎片的查询自己回收

在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作--MySQL数据表碎片整理. 每当MySQL从你的列表中删除了一行内容,该段空间就会被留空.而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大. 当MySQL对数据进行扫描时,它扫描的对象实际是列表的容量需求上限,也就是数据被写入的区域中处于峰值位置的部分.如果进行新的插入操作,MySQL将尝试利用这些留空的区域

MySQL中optimize优化表

前言 当对MySQL进行大量的增删改操作的时候,很容易产生一些碎片,这些碎片占据着空间,所以可能会出现删除很多数据后,数据文件大小变化不大的现象.当然新插入的数据仍然会利用这些碎片.但过多的碎片,对数据的插入操作是有一定影响的,此时,我们可以通过optimize来对表的优化. 为了更加直观的看到数据碎片,Mysql可以使用如下命令查看 show table status [like table_name] 如下图 data_free选项代表数据碎片. 针对MySQL的不同数据库存储引擎,在opt

mysql数据类型整理

mysql 数据类型的概念 定义数据类型的本质上是定义列 类似于描述列 数据分类的意义 分配合适的存储空间 采用不同的操作方法 对应不同的需求 整数类型 正负0 造成 负数多一个 tinyint 1byte 0-255 -128 ~ 127 smallint 2b 0~65535 mediumt 3b int 4b bigint 8b 带小数的类型 float 4b 0,(3.4) double 8b decimal M>D M+2 M<D D+2 decimal 最大支持 (65,30) 默