MySQL Longtext字段优化记录(一)[通俗易懂]

MySQL Longtext字段优化记录(一)[通俗易懂]Longtext优化记录

大家好,又见面了,我是你们的朋友全栈君。

工作中遇到一个查询很慢的情况,环境如下:

开发语言:JAVA

数据库:MySQL

数据量:1600~1800

问题:查询200条时就很慢,是慢在IO上:

MySQL Longtext字段优化记录(一)[通俗易懂]

如果是查全部(一千六百多条),就更慢了,几乎四十秒还没有返回:

MySQL Longtext字段优化记录(一)[通俗易懂]

原因:数据表中有个longtext字段

MySQL Longtext字段优化记录(一)[通俗易懂]

优化思路:数据库中不存longtext字段,新增blob字段,将文本在后端压缩为bytep[]存到blob二进制字段中,查询时返回。理由:zip是现在成熟的压缩算法,基于LZ77算法和哈夫曼编码,可以把文本(String)较大程度地压缩为byte[]。注:不建议再把压缩后的byte[] BASE64为String,因为BASE64是一种编码方式

数据流图:

MySQL Longtext字段优化记录(一)[通俗易懂]

blob字段:

MySQL Longtext字段优化记录(一)[通俗易懂]

后端使用Zip压缩算法,使用java.util.zip包下的DeflaterOutputStream和InflaterOutputStream,压缩文本再保存。压缩使用DeflaterOutputStream:

MySQL Longtext字段优化记录(一)[通俗易懂]

插入测试:

MySQL Longtext字段优化记录(一)[通俗易懂]

插入成功:

MySQL Longtext字段优化记录(一)[通俗易懂]

查询时用InflaterOutputStream将byte[]解压缩还原为文本,new String():

MySQL Longtext字段优化记录(一)[通俗易懂]

MySQL Longtext字段优化记录(一)[通俗易懂]

查询测试:
MySQL Longtext字段优化记录(一)[通俗易懂]

插入和查询测试通过,再将原表的longtext全都更新到blob字段中,然后把原表拷贝到两张表,一张表保留longtext字段,一张表保留blob字段,查询比对如下:

MySQL Longtext字段优化记录(一)[通俗易懂]

说明blob字段IO速度比long text字段IO速度快很多。

注:这种方式就是不存原文本内容,弊端就是无法做对文本的搜索功能,如果要求要对文本做搜索,或者保留为文档到ES中,建议把content字段拆出来一张表和主表关联,也是保存和查询需要处理一下。

希望对你有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146755.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA实验室设备管理系统代码_java做一个简单学生管理系统

    JAVA实验室设备管理系统代码_java做一个简单学生管理系统本系统主要采用面向对象的基于B/S架构的设计,开发平台采用myeclipse,程序设计语言采用java语言,并使用三层架构,采用mysql作为后台数据库。实验室设备管理系统基本实现用户与管理员之间的交互,用户查询设备并对自己需要的进行借用,管理员对用户的设备借用进行审核,最后对于设备的维修进行记录。其基本步骤有以下几点:1.需求分析:以本学院为例询问老师和同学得出系统需求,查找并研究资料,熟悉开发…

    2022年10月13日
    0
  • jquery导航菜单「建议收藏」

    jquery导航菜单「建议收藏」*{ margin:0; padding:0; } ul{ width:800px; overflow:hidden; background-color:#000000; position:relative; margin:0auto; } li{ position:relative; …

    2022年7月26日
    3
  • SpringBoot在Tomcat部署war包[通俗易懂]

    SpringBoot在Tomcat部署war包[通俗易懂]启动类配置继承SpringBootServletInitializer@SpringBootApplicationpublicclassTestApplicationextendsSpringBootServletInitializer{publicstaticvoidmain(String[]args){SpringApplication.run(TestApplication.class,args);}@Override

    2022年6月12日
    31
  • Redis 配置文件详解[通俗易懂]

    Redis 配置文件详解[通俗易懂]Redis配置文件详解  redis是一款开源的、高性能的键-值存储(key-valuestore),和memcached类似,redis常被称作是一款key-value内存存储系统或者内存数据库,同时由于它支持丰富的数据结构,又被称为一种数据结构服务器(datastructureserver)。  编译完redis,它的配置文件在源码目录下redis.conf,将其拷贝到工作目录下即可使用。redis.conf中的各个参数意义:…

    2022年6月12日
    44
  • python fillna_pandas增加一列

    python fillna_pandas增加一列fillna填充缺失值df.fillna()importpandasaspdimportnumpyasnpfromnumpyimportnanasNaNdf1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])df1

    2022年8月12日
    6
  • c ringbuffer 源码_ringbuffer.c

    c ringbuffer 源码_ringbuffer.c#include#include#include#include#include”ringbuffer.h”/*createanewringbuffer*@capacitymaxbuffersizeoftheringbuffer*@returntheaddressofthenewringbuffer,NULLforerror.*/RING_BUF…

    2022年9月10日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号