专栏首页java小白MySQL数据类型之TEXT与BLOB

MySQL数据类型之TEXT与BLOB

一般在保存少量字符串的时候,我们会选择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列分离到单独的表中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子2

            本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论,调试对象是文中刚...

    方亮
  • 使用APIHOOK实现进程隐藏

            今天翻出一些今年前写的代码。其中一个是09年,我帮一个读研的同学写的一个“无公害恶意”程序。大致要求就是要实现自启动和自我隐藏。我使用的都是些简...

    方亮
  • 反汇编算法介绍和应用——线性扫描算法分析

            做过逆向的朋友应该会很熟悉IDA和Windbg这类的软件。IDA的强项在于静态反汇编,Windbg的强项在于动态调试。往往将这两款软件结合使用会...

    方亮
  • WMI技术介绍和应用——查询系统信息

            本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。...

    方亮
  • 反汇编算法介绍和应用——递归下降算法分析

            上一篇博文我介绍了Windbg使用的线性扫描(linear sweep)反汇编算法。本文我将介绍IDA使用的递归下降(recursive des...

    方亮
  • PE文件和COFF文件格式分析——签名、COFF文件头和可选文件头2

            之前的博文中介绍了IMAGE_FILE_HEADER结构,现在来讨论比较复杂的“可选文件头”结构体。(转载请指明来自breaksoftware的...

    方亮
  • PE文件和COFF文件格式分析——RVA和RA相互计算

            之前几节一直是理论性质的东西非常多。本文将会讲到利用之前的知识得出一个一个非常有用的一个应用。(转载请指明来源于breaksoftware的cs...

    方亮
  • PE文件和COFF文件格式分析——导出表

            在之前的《PE可选文件头》相关博文中我们介绍了可选文件头中很多重要的属性,而其中一个非常重要的属性是(转载请指明来源于breaksoftware...

    方亮
  • WMI技术介绍和应用——查询时间信息

            本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。...

    方亮
  • 使用程序解决一道逻辑推理题

            今天看朋友发了一个老问题,一道很有意思的推理题:(转载请指明出于breaksoftware的csdn博客)

    方亮

扫码关注云+社区

领取腾讯云代金券