本文共 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子句的注意事项:
使用栗子
// 查询出所有的数据Integer num = reportSampleDao.getSampleCount(taskId);// 分页读取for (int i = 0; i < leaf; i++) { int finalI = i; new Thread(() -> { ListreportSampleDto = reportSampleDao.getSampleOffset(taskId,finalI*num/leaf,num/leaf); collect.addAll(reportSampleDto); countDownLatch.countDown(); }).start();}
转载地址:http://qptvf.baihongyu.com/