• mysql TEXT与BLOB 碎片整理


    1、一般在保存少量字符串的时候,我们会选择CHAR 或者VARCHAR;而在保存较大文本时,通常会选择使用TEXT 或者BLOB,二者之间的主要差别是BLOB 能用来保存二进制数据,比如照片;而TEXT 只能保存字符数据,比如一篇文章或者日记。TEXT 和BLOB 中有分别包括TEXT、MEDIUMTEXT、LONGTEXT 和BLOB、MEDIUMBLOB、LONGBLOB3 种不同的类型,它们之间的主要区别是存储文本长度不同和存储字节不同,用户应该根据实际情况选择能够满足需求的最小存储类型。本节主要对BLOB 和TEXT 存在的一些常见问题进行介绍。
    2 、BLOB 和TEXT 值会引起一些性能问题,特别是在执行了大量的删除操作时。删除操作会在数据表中留下很大的“空洞”,以后填入这些“空洞”的记录在插入的性能上会有影响。为了提高性能,建议定期使用OPTIMIZE TABLE 功能对这类表进行碎片整理,避免因为“空洞”导致性能问题。

    OPTIMIZE TABLE 的碎片整理功能。

    (1)创建测试表t,字段id 和context 的类型分别为varchar(100)和text:

      mysql> create table t (id varchar(100),context text);

    (2)往t 中插入大量记录,这里使用repeat 函数插入大字符串:
      mysql> insert into t values(1,repeat('haha',100));
      mysql> insert into t values(2,repeat('haha',100));
      mysql> insert into t values(3,repeat('haha',100));
      mysql> insert into t select * from t;
      …
      mysql> insert into t select * from t;
       Query OK, 196608 rows affected (4.86 sec)

      Records: 196608 Duplicates: 0 Warnings: 0

    (3)退出到操作系统下,查看表t 的物理文件大小:
      [linux@yxm test]$ du -sh t.*
      125
      16K t.frm
      155M t.MYD
      8.0K t.MYI
      这里数据文件显示为155MB。
    (4)从表t 中删除id 为“1”的数据,这些数据占总数据量的1/3:
      [linux@yxm test]$ mysql -u root -p1234
      Welcome to the MySQL monitor. Commands end with ; or g.
      Your MySQL connection id is 24 to server version: 5.0.45-log
      Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
      mysql> use test
      Database changed
      mysql> delete from t where id=1;
      Query OK, 131072 rows affected (4.33 sec)
      mysql> exit
      Bye
    (5)再次退出到操作系统下,查看表t 的物理文件大小:
      [linux@yxm test]$ du -sh t.*
      16K t.frm
      155M t.MYD
      8.0K t.MYI
      可以发现,表t 的数据文件仍然为155MB,并没有因为数据删除而减少。
    (6)接下来对表进行OPTIMIZE(优化)操作:
      mysql> use test;
      mysql> OPTIMIZE TABLE t;
      +--------+----------+----------+----------+
      | Table  | Op        | Msg_type | Msg_text |
      +--------+----------+----------+----------+
      | test.t | optimize | status       | OK |
      +--------+----------+----------+----------+
      1 row in set (2.88 sec)
    (7)再次查看表t 的物理文件大小:
      [linux@yxm test]$ du -sh t.*
      16K t.frm
      104M t.MYD
      8.0K t.MYI
      可以发现,表的数据文件大大缩小,“空洞”空间已经被回收。

  • 相关阅读:
    转:理想主义终结年代的七种兵器
    基础地理空间框架
    coldplay 全集下载
    S40 用google sync同步通讯录(转)
    分享一个关于Steve Jobs演讲的分析
    转:我们时代的思想责任与尊严
    nginx 视频流
    vue 使用路由重复跳转同一页面
    批处理文件编写
    ZBB – ZERO Bug Bounce
  • 原文地址:https://www.cnblogs.com/yangxuming/p/6718490.html
Copyright © 2020-2023  润新知