博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【mysql】大数据量数据读取
阅读量:1989 次
发布时间:2019-04-27

本文共 990 字,大约阅读时间需要 3 分钟。

当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时就需要使用分页查询

数据准备

表名:report_sample
描述:获取执行性能报告数据
主要字段:task_id, seconds, elapsed
字段情况:该表10个字段
数据量:1000w+

一次查询出所有记录

不使用分页查询的情况下,一次查询出表中的所有记录,也就是全表扫描

select 	count(*) from 	report_sample where 	task_id = '45eff63a74944f6eb9bef93d8cf04f13';---297843

执行查询的时间约92s

实际的项目当然是不可能进行全表扫描的一次性查询出所有记录的做法,这样会因为数据的响应、传输和装载过慢而影响页面渲染的性能,严重影响用户体验,甚至可能会导致内容溢出

一般的分页查询

select * from table limit [offset,] rows | rows offset offset

limit子句可以被用于指定select语句返回的记录数,以下是使用limit子句的注意事项:

  1. 第一个参数指定第一个返回记录行的偏移量,注意从0开始
  2. 第二个参数指定返回记录行的最大数目
  3. 如果只给定一个参数,这个参数表示返回的最大记录行数目
  4. 如果第二个参数值为-1,那么就表示检索从某一个偏移量到记录集的结束所有的记录行
  5. 初始记录行的偏移量是0,而不是1

使用栗子

// 查询出所有的数据Integer num = reportSampleDao.getSampleCount(taskId);// 分页读取for (int i = 0; i < leaf; i++) {
int finalI = i; new Thread(() -> {
List
reportSampleDto = reportSampleDao.getSampleOffset(taskId,finalI*num/leaf,num/leaf); collect.addAll(reportSampleDto); countDownLatch.countDown(); }).start();}

转载地址:http://qptvf.baihongyu.com/

你可能感兴趣的文章
Mybatis逆向工程的使用
查看>>
关于Hibernate的优缺点
查看>>
常用的 Maven 命令
查看>>
常用的20个正则表达式
查看>>
数据结构之顺序表的实现
查看>>
数据结构之线性链表
查看>>
JQuery使用validate插件完成校验
查看>>
关于java的继承
查看>>
关于java的内部类
查看>>
关于java的枚举
查看>>
一个简单的layui登陆界面
查看>>
SQL考试常见题目
查看>>
使用Spring Boot写一个简单的Hello World
查看>>
Spring Boot整合Servlet使用
查看>>
SpringBoot 文件上传
查看>>
我居然在Github上找到了一个完整的停车系统(附源码地址)
查看>>
大厂经典面试题:Redis为什么这么快?
查看>>
精通Spring?请吃我一狗腿!
查看>>
培训班老师说可以用这个干掉一大批面试者
查看>>
花了 500块大洋 ,买来的677页Java性能调优笔记,感觉4年Java性能调优都白学了
查看>>