前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL数据类型之TEXT与BLOB

MySQL数据类型之TEXT与BLOB

作者头像
秋白
发布2019-02-21 09:57:29
3.4K0
发布2019-02-21 09:57:29
举报
文章被收录于专栏:java小白java小白

一般在保存少量字符串的时候,我们会选择CHAR或者VARCHAR,而在保存较大文本时,通常会选择使用TEXT或者BLOB。二者之间的主要差别是BLOB能用来保存二进制数据,比如照片;而TEXT只能保存字符数据,比如一遍文章或日记。TEXT和BLOB中又分别包括TEXT,MEDIUMTEXT,LONGTEXT和BLOB,MEDIUMBLOB,LONGBLOB三种不同的类型,他们之间的主要区别是存储文本长度不用和存储字节不用,用户应该根据实际情况选择能够满足需求的最小存储类型。

BLOB和TEXT值会引起一些性能问题,特别是执行了大量的删除操作时。

删除操作会在数据库表中留下很大的“空洞”,以后要填入这些“空洞”的记录在插入的性能上会有影响。为了提高性能,建议定期使用OPTIMEIZE TABLE功能对这类表进行碎片整理,避免因为“空洞”导致性能问题。 创建测试表t,字段id和context的类型分别为varchar(100)和text: 然后往t中插入大量记录,这里使用repeat函数插入大量字符串 repeat()函数解释(返回字符串str重复count次后的字符串。如果count小于1,则返回一个空字符串。如果str或count为NULL,返回NULL。)

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

查看表t的物理文件大小

这里写图片描述
这里写图片描述

从表t中删除id为“1”的数据,这些数据占总数据量的1/3;

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

发现表t的数据文件仍然为155MB,并没有因为数据删除而减少,接下来对表进行OPTIMIZE(优化)操作:

这里写图片描述
这里写图片描述

查看表t的物理文件的大小

这里写图片描述
这里写图片描述

可以发现,表的数据文件大大缩小,“空洞”空间已经被回收。

可以使用合成的(Synthetic)索引来提高大文本字段(BLOB或TEXT)的查询性能。

简单来说,合成索引就是根据大文本字段的内容建立一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。但是,要注意这种技术只能用于精确匹配的查询(散列值对于类似“<”或“>=”等范围搜索操作符是没有用处的)。可以使用MD5()函数生成散列值,也可以使用SHA1()或CRC32(),或者使用自己的应用程序逻辑来计算散列值。也可以使用SHA1()或CRC32(),或者使用自己的应用程序逻辑来计算散列值。数值型散列值可以很高效率地存储。如果散列算法生成的字符串带有尾部空格,就不要把他们存储在CHAR或VARCHAR列中,他们会收到尾部去除的影响。合成的散列索引对于那些BLOB或TEXT数据列特别有用。用散列标识符值查找的速度比搜索BLOB列的本身速度快很多。 创建一张表,来介绍合成索引的使用方法。

这里写图片描述
这里写图片描述

插入数据

这里写图片描述
这里写图片描述

如果要查询context值为“beijingbeijing”的记录,则可以通过相应的散列值来查询

这里写图片描述
这里写图片描述

这种做法只能用于精确匹配,在一定程序上减少了I/O,从而提高了查询效率。

在不必要的时候避免检索大型的BLOB或TEXT值。
把BLOB或TEXT列分离到单独的表中。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年01月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BLOB和TEXT值会引起一些性能问题,特别是执行了大量的删除操作时。
  • 可以使用合成的(Synthetic)索引来提高大文本字段(BLOB或TEXT)的查询性能。
    • 在不必要的时候避免检索大型的BLOB或TEXT值。
    • 把BLOB或TEXT列分离到单独的表中。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档