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

开发语言:JAVA

数据库:MySQL

数据量:1600~1800

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

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

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

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

数据流图:

blob字段:

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

插入测试:

插入成功:

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

查询测试:

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

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

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

希望对你有所帮助。

MySQL Longtext字段优化记录(一)相关推荐

  1. 关于C#(ASP.net)存取MySQL LongText字段的心得[转]

    关于C#(ASP.net)存取MySQL LongText字段的心得 1.LongText字段是MySQL用于存储超长字符串的数据库类型,有点类似MSSQL的memo. 2.Connector/NET ...

  2. mysql sql in or 替换_sql IN 的用法一例--替换 mysql longtext字段中某些内容的用法

    之前给改版的一个学校里的站点突然提出要求,说需要将之前编辑的文章的字体大小全部改成默认值. 字体的控制无非有两种,一是font-size = 16 px:然后是.但是,之前发布的文章,文字的控制是由编 ...

  3. mysql字段优化_MySQL优化(1):字段的设计

    Web项目中,当Java或者Go等语言速度提升到瓶颈的时候,我们需要关心MySQL的优化 可以优化的方面有很多:设计表.负载均衡.读写分离.SQL语句优化等 (1)IP地址设计 例如我们需要存储IP地 ...

  4. 数据库性能优化—MySQL单表最大记录数超过多少时性能会严重下降

    以前没有想过MySQL数据库的单表最大行数,直到最近interview时被问到c语言中int类型的最大值是多少时才想到Mysql单表最大行数的问题. 一开始被问到C语言中int类型的最大值有点懵逼,一 ...

  5. mysql 排序字段索引吗_Mysql 排序优化与索引使用(转)

    为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索引是一个不错的方法.因为索引本身也是有序的,如果在需要排序的字段上面建立了合适的索引,那么就可以跳过排序的过程,提高SQL的查询速度.下面 ...

  6. MySQL单表数据量过千万,采坑优化记录,完美解决方案

    MySQL单表数据量过千万,采坑优化记录,完美解决方案 参考文章: (1)MySQL单表数据量过千万,采坑优化记录,完美解决方案 (2)https://www.cnblogs.com/ExMan/p/ ...

  7. mysql合并多条纪录字段_Mysql应用mysql合并多条记录的单个字段去一条记录编辑

    <MysqL应用MysqL合并多条记录的单个字段去一条记录编辑>要点: 本文介绍了MysqL应用MysqL合并多条记录的单个字段去一条记录编辑,希望对您有用.如果有疑问,可以联系我们.测试 ...

  8. mysql查询到最新记录就停止_使用Limit参数优化MySQL查询 在找到一个记录后将停止查询...

    优化 MySQL 查询的 Limit 参数 我们在做一些查询的时候总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的.那么在 MySQL 中有那些方式是可 ...

  9. mysql表数量限制_关于数据库字段、记录、行大小的数量限制和合理取值

    markdy 今天又上游团队的同事通过内部平台提问了GaussDB的相关问题,下面这个问题,顺便记录在此. 本文关于字段.记录.行大小的数量限制和合理取值. 字段数量 以mysql为例,实践经验是不超 ...

最新文章

  1. ios开发之系统信息
  2. 我和我的Android
  3. 网络安全和支付 讲解
  4. IIS与COM组件权限的问题
  5. 你是别人眼中的废物产品经理吗?
  6. 155个建议笔记--建议33:不要覆写静态方法
  7. SQL BASELINE修改固定执行计划
  8. python alter_GitHub - sealter/LearnPython: 以撸代码的形式学习Python
  9. Springboot -- 由于jar版本不匹配遇到的问题
  10. 04、自学——计算机网络学习任务与进度(物理层)
  11. 分享个PDF文件签名盖章 DEMO
  12. wan口有流量但电脑上不了网_路由器wan口流量_双WAN口路由器配置(WAN口设置/WAN口在线检测/流量均衡控制)_路由器检测不到wan...
  13. bixby服务器没响应,猫盘开启ssh教程(原版系统,听闻一键x3p已经不能用了!)...
  14. 【网络安全】Centos7安装杀毒软件----ClamAV
  15. S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
  16. html5中hr是什么意思,【hr是什么意思】hr的意思_hr指的是什么_亲亲宝贝网
  17. Java的特征/特点(全)
  18. 初学Java常用设计模式之——工厂模式
  19. 【matlab 播放音乐】教你如何用matlab播放音乐
  20. 基于51单片机的SHT11温湿度检测调节系统(LCD12864显示)

热门文章

  1. 软件专用测试清单,软件测试计划清单实用模板.doc
  2. 计算机人格测试题,计算机自适应测验环境下考生能力水平和大五人格对试题作答行为的影响...
  3. js setTimeout的三种情况
  4. 梯度下降(Gradient descent)算法详解
  5. html怎么使两个div模块并列居中,css怎样让两个div重叠,怎么让整个div居中
  6. 渗透测试学习建议~拿去日站吧
  7. SCPI基本语法和三种通信方式
  8. AOSP版Android源代码在线查看
  9. Python十大经典语法合集
  10. Vue.js学习详细课程系列--共32节(2 / 6)