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字段拆出来一张表和主表关联,也是保存和查询需要处理一下。

希望对你有所帮助。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • js如何创建数组

    js如何创建数组如何创建数组使用数组之前首先要创建,而且需要把数组本身赋至一个变量。好比我们出游,要组团,并给团定个名字“云南之旅”。创建数组语法:varmyarray=newArray();        我们创建数组的同时,还可以为数组指定长度,长度可任意指定。varmyarray=newArray(8);//创建数组,存储8个数据。 注意:1.创

  • linux怎么编写shell脚本_简单的shell脚本代码

    linux怎么编写shell脚本_简单的shell脚本代码用springboot框架做的项目,将第三方包全部打在jar里面,通过shell脚本启动和停止服务,常用的shell脚本模板如下:#!/bin/bashJAVA_OPTIONS_INITIAL=-Xms128MJAVA_OPTIONS_MAX=-Xmx512M_JAR_KEYWORDS=monitor-alarm-task-1.0-SNAPSHOT.jarAPP_NAME=monitor-al…

  • CAD拉伸的快捷命令_cad拉伸实体快捷键

    CAD拉伸的快捷命令_cad拉伸实体快捷键CAD快捷键在CAD绘图中是不可或缺的,刚入门CAD的小伙伴们一定要熟练掌握常用CAD快捷键命令的使用。那么CAD拉伸快捷键命令是什么呢?又该如何使用呢?下面小编就来给大家介绍一下浩辰CAD软件中CA

  • xxxxxxxxxxxxxxxxxxxxxxxxxxxx

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxGetAuthorizationcode:Request:https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=https%3A%2

  • Promise是什么?Promise怎么使用?回调地狱[通俗易懂]

    Promise是什么?Promise怎么使用?回调地狱[通俗易懂]1、Promise的概念Promise是ES6提供的原生的类(构造函数),用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作)2、Promise的两个特点:1)、对象的状态不受外界影响。Promise有三种状态:Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已失败)。2)、一旦状态改变,就不会再变状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Reje

  • 775针cpu性能最好的_英特尔775针cpu性能排行

    775针cpu性能最好的_英特尔775针cpu性能排行排名型号评分1IntelCorei7995X@3.60GHz10,8622IntelXeonW3690@3.47GHz10,8283IntelCorei7990X@3.47GHz10,6544IntelCorei7980X@3.33GHz10,6075IntelXeonX5690@3.47GHz10,3146IntelCorei7980@3….

发表回复

您的电子邮箱地址不会被公开。

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