前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL Longtext字段优化记录(一)[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-08-28 09:08:33
3K0
发布2022-08-28 09:08:33
举报
文章被收录于专栏:全栈程序员必看

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

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

开发语言:JAVA

数据库:MySQL

数据量:1600~1800

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

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

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

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

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

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

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

数据流图:

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

blob字段:

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

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

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

插入测试:

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

插入成功:

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

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

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

查询测试:

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

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

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

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

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

希望对你有所帮助。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档