iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql如何进行OPTIMIZE TABLE整理碎片
  • 535
分享到

mysql如何进行OPTIMIZE TABLE整理碎片

2023-06-06 01:06:48 535人浏览 独家记忆
摘要

这篇文章给大家介绍mysql如何进行OPTIMIZE TABLE整理碎片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。来看看手册中关于 OPTIMIZE 的描述:OPTIMIZE [LOCAL | NO_WRITE_T

这篇文章给大家介绍mysql如何进行OPTIMIZE TABLE整理碎片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

来看看手册中关于 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定表。


原始数据

1,数据量

mysql> select count(*) as total from test_history; 
+---------+ 
| total | 
+---------+ 
| 1187096 | //总共有118万多条数据 
+---------+ 
1 row in set (0.04 sec)

2,存放在硬盘中的表文件大小

[root@ www.linuxidc.com test1]# ls |grep visit |xargs -i du {} 
382020 test_history.MYD //数据文件占了380M 
127116 test_history.MYI //索引文件占了127M 
12 test_history.frm //结构文件占了12K

3,查看一下索引信息

mysql> show index from test_history from test1; //查看一下该表的索引信息 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
| test_history | 0 | PRIMARY | 1 | id | A | 1187096 | NULL | NULL | | BTREE | | 
| test_history | 1 | ad_code | 1 | ad_code | A | 46 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | unique_id | 1 | unique_id | A | 1187096 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | ad_code_ind | 1 | ad_code | A | 46 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | from_page_url_ind | 1 | from_page_url | A | 30438 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | ip_ind | 1 | ip | A | 593548 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | port_ind | 1 | port | A | 65949 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | session_id_ind | 1 | session_id | A | 1187096 | NULL | NULL | YES | BTREE | | 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
8 rows in set (0.28 sec)

索引信息中的列的信息说明。

Table :表的名称。
Non_unique:如果索引不能包括重复词,则为0。如果可以,则为1。
Key_name:索引的名称。
Seq_in_index:索引中的列序列号,从1开始。
Column_name:列名称。
Collation:列以什么方式存储在索引中。在MySQLSHOW INDEX语法中,有值’A’(升序)或NULL(无分类)。
Cardinality:索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。
Sub_part:如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
Packed:指示关键字如何被压缩。如果没有被压缩,则为NULL。
Null:如果列含有NULL,则含有YES。如果没有,则为空。
Index_type:存储索引数据结构方法(BTREE, FULLTEXT, HASH, RTREE)

二,删除一半数据

mysql> delete from test_history where id>598000; //删除一半数据 
Query OK, 589096 rows affected (4 min 28.06 sec)

[root@ www.linuxidc.com test1]# ls |grep visit |xargs -i du {} //相对应的MYD,MYI文件大小没有变化 
382020 test_history.MYD 
127116 test_history.MYI 
12 test_history.frm

按常规思想来说,如果在数据库中删除了一半数据后,相对应的.MYD,.MYI文件也应当变为之前的一半。但是删除一半数据后,.MYD.MYI尽然连1KB都没有减少,这是多么的可怕啊。

我们在来看一看,索引信息
mysql> show index from test_history; 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
| test_history | 0 | PRIMARY | 1 | id | A | 598000 | NULL | NULL | | BTREE | | 
| test_history | 1 | ad_code | 1 | ad_code | A | 23 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | unique_id | 1 | unique_id | A | 598000 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | ad_code_ind | 1 | ad_code | A | 23 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | from_page_url_ind | 1 | from_page_url | A | 15333 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | ip_ind | 1 | ip | A | 299000 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | port_ind | 1 | port | A | 33222 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | session_id_ind | 1 | session_id | A | 598000 | NULL | NULL | YES | BTREE | | 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
8 rows in set (0.00 sec)

对比一下,这次索引查询和上次索引查询,里面的数据信息基本上是上次一次的一本,这点还是合乎常理。

三,用optimize table来优化一下


show table status like 'XXX'\G;

data_free选项代表数据碎片。 
针对MySQL的不同数据库存储引擎,在optimize使用清除碎片,回收闲置的数据库空间,把分散存储(fragmented)的数据和索引重新挪到一起(defragmentation),对I/O速度有好处。


mysql> optimize table test_history; //删除数据后的优化 
+------------------------+----------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------------+----------+----------+----------+ 
| test1.test_history | optimize | status | OK | 
+------------------------+----------+----------+----------+ 
1 row in set (1 min 21.05 sec)

1,查看一下.MYD,.MYI文件的大小

[root@ www.linuxidc.com test1]# ls |grep visit |xargs -i du {} 
182080 test_history.MYD //数据文件差不多为优化前的一半 
66024 test_history.MYI //索引文件也一样,差不多是优化前的一半 
12 test_history.frm

2,查看一下索引信息
mysql> show index from test_history; 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
| test_history | 0 | PRIMARY | 1 | id | A | 598000 | NULL | NULL | | BTREE | | 
| test_history | 1 | ad_code | 1 | ad_code | A | 42 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | unique_id | 1 | unique_id | A | 598000 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | ad_code_ind | 1 | ad_code | A | 42 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | from_page_url_ind | 1 | from_page_url | A | 24916 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | ip_ind | 1 | ip | A | 598000 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | port_ind | 1 | port | A | 59800 | NULL | NULL | YES | BTREE | | 
| test_history | 1 | session_id_ind | 1 | session_id | A | 598000 | NULL | NULL | YES | BTREE | | 
+------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 
8 rows in set (0.00 sec)

从以上数据我们可以得出,ad_code,ad_code_ind,from_page_url_ind等索引机会差不多都提高了85%,这样效率提高了好多。

四,小结

结合mysql官方网站的信息,个人是这样理解的。当你删除数据时,mysql并不会回收,被已删除数据的占据的存储空间,以及索引位。而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写比较频烦的表,要定期进行optimize,一个月一次,看实际情况而定了。

关于mysql如何进行OPTIMIZE TABLE整理碎片就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: mysql如何进行OPTIMIZE TABLE整理碎片

本文链接: https://www.lsjlt.com/news/245594.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql如何进行OPTIMIZE TABLE整理碎片
    这篇文章给大家介绍mysql如何进行OPTIMIZE TABLE整理碎片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。来看看手册中关于 OPTIMIZE 的描述:OPTIMIZE [LOCAL | NO_WRITE_T...
    99+
    2023-06-06
  • U盘如何进行碎片整理
    这篇文章主要介绍了U盘如何进行碎片整理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法/步骤:右键U盘,随后打开对应的属性窗口,直接切换到工具,最后点击立即进行碎片整理。电...
    99+
    2023-06-27
  • win7如何进行磁盘碎片整理
    本篇内容主要讲解“win7如何进行磁盘碎片整理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win7如何进行磁盘碎片整理”吧!方法/步骤: 在win7桌面中点击“计算机”进入,右键选中其中的一个...
    99+
    2023-06-27
  • MySQL5.7中如何进行数据碎片整理
    本篇文章给大家分享的是有关MySQL5.7中如何进行数据碎片整理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 &...
    99+
    2024-04-02
  • windows中如何进行磁盘碎片整理
    这篇文章主要介绍“windows中如何进行磁盘碎片整理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows中如何进行磁盘碎片整理”文章能帮助大家解决问题。磁...
    99+
    2023-02-21
    windows
  • win7系统如何进行磁盘碎片整理呢
    当我们下载工具、在线视频播放工具等会在磁盘中产生一些碎片,如果长时间没有清理磁盘碎片,会影响到系统的运行速度,严重的甚至会出现磁盘损坏,特别是经常在线看网络视频的用户。所以我们必须对磁盘进行碎片整理,那win7系统如何碎片整理呢?本篇文章就...
    99+
    2023-07-10
  • win10如何对C盘进行优化和碎片整理?
    很多朋友电脑更新win10后使用一段时间后会变卡,耽误我们平时的办公和影音娱乐,下面就介绍一种方法,不借助其他的第三方软件,利用电脑自带的工具就可以实现对系统进行优化和碎片整理,效果还是挺好的。 方法/步骤 从桌面上找...
    99+
    2023-05-20
    win10
  • Linux为什么不用进行碎片整理
    本篇内容主要讲解“Linux为什么不用进行碎片整理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux为什么不用进行碎片整理”吧!什么是磁盘碎片?  很多 Windows 的用户,甚至包括一...
    99+
    2023-06-28
  • win7磁盘如何整理碎片
    小编给大家分享一下win7磁盘如何整理碎片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!整理方法:首先点击页面底部的“开始”菜单按钮,在弹出的菜单栏中点击“所有程...
    99+
    2023-06-15
  • win10磁盘碎片如何整理
    这篇文章主要介绍“win10磁盘碎片如何整理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10磁盘碎片如何整理”文章能帮助大家解决问题。 win10磁盘碎片...
    99+
    2023-01-29
    win10
  • win10如何整理磁盘碎片
    本篇内容介绍了“win10如何整理磁盘碎片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!win10磁盘碎片的整理步骤双击打开“此电脑”,如下...
    99+
    2023-07-01
  • ubuntu磁盘碎片如何整理
    在Ubuntu中,可以使用e4defrag命令来整理磁盘碎片。e4defrag是ext4文件系统的碎片整理工具。首先,打开终端(Ct...
    99+
    2023-08-24
    ubuntu
  • MySQL - 表空间碎片整理方法
    MySQL数据库中的表在进行了多次delete、update和insert后,表空间会出现碎片。定期进行表空间整理,消除碎片可以提高访问表空间的性能。 检查表空间碎片 下面这个实验用于验证进行表空间整理后对性能的影响,首先检查这个...
    99+
    2023-10-25
    mysql adb android
  • win10如何优化磁盘碎片整理
    这篇文章主要介绍了win10如何优化磁盘碎片整理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。鼠标双击打开此电脑。在界面中,打开系统盘。在窗口中,点击管理选项,选择优化。在弹...
    99+
    2023-06-28
  • win7磁盘整理碎片如何操作
    在Windows 7中,你可以按照以下步骤操作磁盘整理碎片:1. 打开“计算机”或“我的电脑”窗口。2. 右键点击你想整理碎片的硬盘...
    99+
    2023-10-19
    win7
  • win10磁盘整理碎片如何操作
    在Windows 10中,可以使用以下步骤来操作磁盘整理碎片:1. 打开“此电脑”(也可以在桌面上的“我的电脑”图标上右键单击并选择...
    99+
    2023-10-23
    win10
  • MySQL磁盘碎片整理实例演示
    目录1.磁盘碎片是什么2.实验3.对于碎片回收操作4.后记补充:如何优化磁盘空间数据库引擎以InnoDB为主 1.磁盘碎片是什么 ​InnoDB表的数据存储在页中,每个页可以存放多条...
    99+
    2024-04-02
  • MySQL数据碎片的整理和分析
    MySQL数据碎片的整理和分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 MySQL具有相当多不同种类的...
    99+
    2024-04-02
  • 电脑如何禁用碎片整理服务
    这篇文章主要介绍了电脑如何禁用碎片整理服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法/步骤:点击“开始菜单”图标,随后选择“控制面板”进入。 在控制面板界面...
    99+
    2023-06-27
  • Win7系统如何轻松整理磁盘碎片
    一年前,小丽开始使用Win7系统,很快就被Win7丰富的创新功能、卓越的兼容性,安全稳定的性能表现以及简单、安全、便捷的操作方式深深吸引,明显体会到了Win7给自己生活工作提供的各种方便。最近小丽感觉自己的系统速度好像没...
    99+
    2023-05-26
    磁盘碎片 Win7 系统
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作