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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ResNet34_resnetv2

    ResNet34_resnetv2pytorch版本:https://blog.csdn.net/github_36923418/article/details/83273107keras版本:https://blog.csdn.net/m0_37477175/article/details/83861678

    2022年10月5日
    1
  • ajax基础

    ajax基础

    2022年1月27日
    39
  • java的用途有哪些,被运用到哪些地方?

    java的用途有哪些,被运用到哪些地方?如果你是一个起步者或者只是刚刚开始学习Java,你或许会疑虑,Java到底是在哪里被运用的呢?除了Minecraft这款游戏以外,你没有见过用Java编写的游戏吧?桌面工具AdobeAcrobat、微软的Office办公软件,他们都不是用Java编写,以至于连我们电脑所应用的操作系统(Linux和Windows)都不是,那么人们如何运用Java的呢?现实世界中到底有没有运用Java的应用呢?这个问题所有的程序员都会在初学Java或者在为了毕业必须掌握一门编程语言而开始学

    2022年7月8日
    20
  • c++关机程序

    c++关机程序//system(“shutdown-s-t10”);//关机system(“cls”);//清屏Sleep()//延时等待这是一个电脑关机程序,但不要无聊尝试,可以在关机是使用HideCursor(); //隐藏光标#include#include<stdio.h>#include<windows.h>#includeintmain(){system(“shutdown-s-t60”);}…

    2022年7月22日
    13
  • recvfrom为何老是返回-1[通俗易懂]

    recvfrom为何老是返回-1[通俗易懂]ios下编写udpSocket时遇到的问题:intsockfd=socket(AF_INET,SOCK_DGRAM,0);bzero((char*)&ca,sizeof(ca));ca.sin_family=AF_INET;ca.sin_addr.s_addr=htonl(INADDR_ANY);ca.sin_port=htons(SERV_

    2022年7月23日
    9
  • Pycharm激活方法(active code)

    Pycharm激活方法(active code)第一步,将“0.0.0.0 account.jetbrains.com”添加到hosts文件中第二步,输入activecode,提交详情见:http://idea.lanyus.com/

    2022年8月26日
    121

发表回复

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

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