对于mysql中的数据碎片,事实上和我们删除数据是息息相关的,删除数据的时候必定会在数据文件里造成不连续的空白空间,对于少量的数据的删除,并不会产生多少的空白空间。假设在一段时间内的大量的删除操作,会使得这样的留空的空间变得比存储列表内容所使用的空间更大。

可能有人会说。我们向数据库中插入数据的时候,会不会在这些空白空间中插入数据呢?答案是会的。

可是,它会造成一个后果。那就是数据的存储位置不连续,以及物理存储顺序与理论上的存储顺序不同样,这就比較麻烦了。

依照数据碎片的大小来分,能够分为单行数据碎片和多行数据碎片。

事实上不只会产生数据碎片。假设加了索引,还会产生索引碎片,这样会造成顺序的紊乱。因为MySQL的引擎的内部实现机制不同,在数据碎片的处理上也会不同。

对于MyISAM来说,由于它的索引和数据以及表结构分为三个文件来存储,因此optimize能够整理数据文件,而且又一次排序。这样由于数据碎片产生的性能问题会降低非常多,直接使用【optimize table 表名】就可以,可是此时也应该注意一些问题。由于该操作会锁住表。所以我们尽量定期整理一下碎片,在訪问量小的时候来做这件事。

我们能够查看information_schema数据库下的tables中的free_data字段就可以,假设该字段不为0,则产生了数据碎片,看以下操作:

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use information_schema;
Database changed
mysql> select data_free from tables;
+-----------+
| data_free |
+-----------+
| 0 |
| 0 |
...中间省略部分数据
| 0 |
| 72 |
| 0 |
| 0 |
+-----------+
162 rows in set (0.06 sec) mysql>

这里我们是查看全部的表中的数据碎片。假设我们想单独看某一个表的数据碎片,看以下操作:

第一步,我们先建立一个库和一个表,并向当中插入四条数据:

mysql> create database xinxing;
Query OK, 1 row affected (0.16 sec) mysql> use xinxing;
Database changed mysql>
mysql> create table xin (c char(40)) engine = myisam;
Query OK, 0 rows affected (0.06 sec) mysql>
mysql> insert into xin values('xiaohei'),('xiaoqian'),
-> ('xiaolin'),('xiaonan');
Query OK, 4 rows affected (0.03 sec)
Records: 4 Duplicates: 0 Warnings: 0

第二步,我们查看这个表的信息:

mysql> show table status from xinxing \G
*************************** 1. row ***************************
Name: xin
Engine: MyISAM
Version: 10
Row_format: Fixed
Rows: 4
Avg_row_length: 121
Data_length: 484
Max_data_length: 34058472181989375
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2014-08-25 13:19:02
Update_time: 2014-08-25 13:19:35
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

我们发现这里面并没有数据碎片。都是很严密的。

第三步,我们删除一条数据:

mysql> delete from xin where c = 'xiaolin';
Query OK, 1 row affected (0.00 sec)

第四步。我们再次查看,发现数据碎片产生了:

mysql> show table status from xinxing \G
*************************** 1. row ***************************
Name: xin
Engine: MyISAM
Version: 10
Row_format: Fixed
Rows: 3
Avg_row_length: 121
Data_length: 484
Max_data_length: 34058472181989375
Index_length: 1024
Data_free: 121
Auto_increment: NULL
Create_time: 2014-08-25 13:19:02
Update_time: 2014-08-25 13:20:15
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

我们发现上面的data_free字段为121,也就是产生了121字节的空白空间。

大家注意,我们这里仅仅是删除了一条数据。假设删除n条数据。那这些碎片就非常影响性能了,至于它的解决的方法,我们上面也提到了,这里就不再提了。

我是辛星。期待您的关注。

辛星浅谈mysql中的数据碎片以及引擎为MyISAM下的操作的更多相关文章

  1. 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...

  2. 浅谈mysql中不同事务隔离级别下数据的显示效果

    事务的概念 事 务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查 询语句因为崩溃或其他原因而无法执行,那 ...

  3. 浅谈mysql中varchar(m)与char(n)的区别与联系

    mysql建表长度的限制 在mysql建表时,出现以下报错信息: 错误一:行大小过大,所使用的表这种类型的最大的行大小,不算BLOB类型,是65535.(这是我翻译的)    原因是MySQL在建表的 ...

  4. 浅谈MySQL中的查询优化

    mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等.这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整 ...

  5. 浅谈mysql中各种表空间(tablespaces)的概念

    mysql中,会涉及到各种表空间的概念,虽然,很多方面这些概念和Oracle有相似性,但也有很多不同的地方,初学者很容易被这些概念弄的晕头转向,从而,混淆这些概念的区别和理解,下面,就简要介绍和说明一 ...

  6. 浅谈mysql中utf8和utf8mb4区别

    转自:http://ourmysql.com/archives/1402  实践过程中发现有时mysql的字符集会引起故障,所以需要了解下这个知识点. 一.简介 MySQL在5.5.3之后增加了这个u ...

  7. 浅谈Oracle中物理结构(数据文件等。。。)与逻辑结构(表空间等。。。。。)

    初始Oracle时很难理解其中的物理结构和逻辑结构,不明白内存中和硬盘中文件的区别和联系,我也是初学Oracle,这里就简单的谈谈我我看法. 首先,你需要明白的一点是:数据库的物理结构是由数据库的操作 ...

  8. 浅谈 Mysql 中的索引

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  9. 浅谈MySQL中优化sql语句查询常用的30种方法

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

随机推荐

  1. opencv3+python+pycharm报错问题(cmd命令正常)

    2018-03-0223:58:59 首先在你已成功安装python的情况下运行cmd命令,下载安装opencv插件 如果在命令行可以使用 import cv2 但是在IDE上面只输入import c ...

  2. pycharm永久激活(转载)

    转载自CSDN--http://blog.csdn.net/mr_hhh/article/details/79062747 2018-02-2417:30:52 今天再补充一个教程,关于pycharm ...

  3. java 物理分页和逻辑分页

    A.逻辑分页利用游标分页,好处是所有数据库都统一,坏处就是效率低.1.逻辑分页的第一种方式,利用ResultSet的滚动分页.这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”.步骤 ...

  4. 【译】x86程序员手册29-第8章 输入输出

    Chapter 8 Input/Output 输入/输出 This chapter presents the I/O features of the 80386 from the following ...

  5. CAD如何直接打印,不出现打印对话框?

    主要用到函数说明: MxDrawXCustomFunction::Mx_Print 直接打印,不出现打印对话框,详细说明如下: 参数 说明 double ptLBx 打印的范围左下角x double ...

  6. 反转链表_JAVA

    package algorithms; /* * * * 输入一个链表,反转链表后,输出新链表的表头. * public class ListNode { int val; ListNode next ...

  7. php redis使用 常用方法

    基本 $redis = new Redis();//创建对象 $redis->connect('127.0.0.1',6379);//建立连接 $redis->delete('test') ...

  8. vue启动

    首先在终端terminal连上npm 镜像库 npm config set registry https://registry.npm.taobao.orgnpm installnpm run loc ...

  9. block的作用

    ios高效开发--blocks相关   1.替换delegate       如果我们有2个viewController,a和b,当我们从a界面push到b后,在b上面触发了一些事件,这些时间又会影响 ...

  10. 洛谷——P1073 最优贸易

    P1073 最优贸易 n 个城市间以 m 条有向道路连接, 小 T 从 1 号城市出发, 将要去往 n 号城市.小 T 观察到一款商品 Z 在不同的城市的价格可能不尽相同,小 T 想要在旅行中的某一个 ...