深度分页问题优化方案

问题原因

Mysql使用select * from table limit offset, rows分页在深度分页的情况下, 性能急剧下降。

例如:select * 的情况下直接⽤limit 600000,10 扫描的是约60万条数据,并且是需要回表 60W次,也就是说⼤部分性能都耗在随机访问上,到头来只⽤到10条数据(总共取600010条数据只留10条记录)

优化方案

前端方案:业务层面限制跨度比较大的跳页

提供2种风格分页器供用户选择

  1. 标准分页器,展示最后一页和跳转指定页输入框
    image.png
  2. 简单分页器
    image.png

参考
百度方案: 不展示最后一页和直接跳转指定分页的输入框
image.png
Google方案:只展示查看下一页的按钮
image.png

界面设计器选表格/画廊的属性面板提供分页器风格的属性下拉选择

image.png

xml示例
<!-- 表格使用的标准分页器 --> <view type="TABLE" paginationStyle="SIMPLE"> <!-- fields --> </view> <!-- 画廊使用默认的标准分页器 --> <view type="GALLERY" paginationStyle="STANDARD"> <!-- fields --> </view>

后端方案

  1. 使用索引:确保数据库表中的相关字段上创建了适当的索引。索引可以加快查询速度,特别是在处理大数据量时。

  2. 分批查询:将大数据分成多个较小的批次进行查询,而不是一次性查询全部数据。可以通过限制每次查询的数据量和使用合适的偏移量来实现分批查询,例如使用LIMIT和OFFSET子句。

  3. 基于游标的分页:使用基于游标的分页技术,而不是传统的偏移分页。游标分页是通过记录上一次查询的游标位置,在下一次查询时从该位置开始获取新的数据,避免了大偏移量的影响。这可以通过数据库自身的功能(例如MySQL的CURSOR)或使用第三方库来实现。

  4. 缓存数据:如果数据变化较少,可以考虑将查询结果缓存到内存中,以避免频繁地查询数据库。这样可以提高页面相应速度,并减轻数据库负担。缓存的数据应该根据业务需要及时更新。

  5. 数据预处理:如果查询结果经常需要进行复杂的计算或处理,可以考虑提前对数据进行预处理并缓存结果,以减少每次查询的计算负担。

  6. 数据库优化:针对具体数据库系统,可以根据实际情况进行数据库调优。例如,合理设置数据库连接池大小、调整数据库参数等。

  7. 分布式存储和计算:对于非关系型数据库或分布式存储系统,可以考虑使用分布式存储和计算方案,将数据分散存储在多个节点上,并通过计算节点并行处理查询请求,以提高性能和可伸缩性。

参考链接

MySQL深分页场景下的性能优化

Oinone社区 作者:原创文章,如若转载,请注明出处:https://doc.oinone.top/other/75.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

Like (0)
's avatar
Previous 2023年6月20日 pm4:07
Next 2023年11月2日 pm1:58

相关推荐

  • 4.0.x版本更新说明-20230307

    版本号:4.0.x发布日期:2023.03.07更新要点:前端发布内容包括允许配置submitType和relationUpdateType属性、ViewAction支持load函数配置、ViewAction支持配置context、视图主要组件支持load函数配置、视图主要组件支持context传递到queryWrapper的queryData、数据提交客户端动作支持mapping映射、修复后置触发的提交动作刷新子视图数据、修复表格操作列字段展示。后端发布内容包括数据加载函数配置load和跳转页面传参配置context。这些更新将提升系统功能性和用户体验。 1 发布概要 1.1 前端 发布内容: 允许配置submitType和relationUpdateType属性 ViewAction支持load函数配置 ViewAction支持配置context 视图主要组件支持load函数配置 视图主要组件支持context传递到queryWrapper的queryData中 数据提交客户端动作支持mapping映射 修复后置触发的提交动作刷新子视图数据 修复表格操作列的字段展示 1.2 后端 发布内容: 数据加载函数配置。 跳转页面传参配置。 2.版本包信息 <pamirs.middleware.version>3.5.7</pamirs.middleware.version> <pamirs.boot.version>4.0.3</pamirs.boot.version> <pamirs.framework.version>4.0.1</pamirs.framework.version> <pamirs.k2.version>4.0.1</pamirs.k2.version> <pamirs.core.version>4.0.3</pamirs.core.version> <pamirs.tenant.version>3.5.7</pamirs.tenant.version> <pamirs.lowcode.version>3.5.7</pamirs.lowcode.version> <pamirs.designer.version>4.0.1</pamirs.designer.version> <pamirs.workflow.designer.version>4.0.1</pamirs.workflow.designer.version> <pamirs.workflow.version>4.0.1</pamirs.workflow.version> <pamirs.workbench.version>4.0.1</pamirs.workbench.version> <pamirs.designer.common.version>3.5.7</pamirs.designer.common.version> <pamirs.model.designer.version>3.5.8</pamirs.model.designer.version> <pamirs.logic.designer.version>3.5.7</pamirs.logic.designer.version> <pamirs.ui.designer.version>4.0.6</pamirs.ui.designer.version> <pamirs.data.designer.version>3.5.7</pamirs.data.designer.version> <pamirs.data.visualization.version>3.5.7</pamirs.data.visualization.version> <pamirs.distribution.version>3.5.7</pamirs.distribution.version> <pamirs.welcome.version>3.5.7</pamirs.welcome.version> <pamirs.gemini.version>4.0.1</pamirs.gemini.version> <pamirs.paas.version>4.0.1</pamirs.paas.version> 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,建议请升级至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢您的支持!

    2023年3月7日
    1.2K00
  • 3.5.6 DSL配置大全(略)

    因为默认视图很难满足客户的个性化需求,所以日常开发中view的配置是避免不了的。本系列篇是比较全面地介绍View配置的各个方面涉及:视图、字段、动作、布局等

    Oinone 7天入门到精通 2024年5月23日
    2.0K00
  • 3.0.5版本更新说明-20220815

    版本号:3.0.5发布日期:2022.08.15更新要点: 前端更新:包括界面设计器布局优化和加密方式修改,数据编码组件优化,字段数据字典查看,表达式展示优化,Dialog组件改进。 后端更新:涵盖界面设计器布局支持和页面设计器迭代,数据编码元数据引用,数据字典查询功能,以及tableWidget改进。 1 发布概要 前端 界面设计器左树右表、级联设计 实现页面左树右表、级联布局 修改加密 模型设计器迭代优化 数据编码组件优化,支持选择已有编码 字段的数据字典可直接点击查看 表达式内支持展示已废弃的字段,不可选中 后端 界面设计器左树右表 layout支持 页面设计器迭代6,除树表级联部分 数据编码元数据引用 数据编码、数据字典所属模块查询 tableWidget的rowActions区域变更为rowActionWidget 2.版本信息 <pamirs.middleware.version>3.0.1</pamirs.middleware.version> <pamirs.boot.version>3.0.3</pamirs.boot.version> <pamirs.core.version>3.0.4.2</pamirs.core.version> <pamirs.tenant.version>3.0.1</pamirs.tenant.version> <pamirs.lowcode.version>3.0.1</pamirs.lowcode.version> <pamirs.designer.version>3.0.2-SNAPSHOT</pamirs.designer.version> <pamirs.workflow.designer.version>3.0.6</pamirs.workflow.designer.version> <pamirs.model.designer.version>3.0.3</pamirs.model.designer.version> <pamirs.logic.designer.version>3.0.1</pamirs.logic.designer.version> <pamirs.ui.designer.version>3.1.6-cpc</pamirs.ui.designer.version> <pamirs.data.designer.version>3.0.3</pamirs.data.designer.version> <pamirs.data.visualization.version>3.0.3</pamirs.data.visualization.version> <pamirs.distribution.version>3.0.1</pamirs.distribution.version> <pamirs.welcome.version>3.0.3</pamirs.welcome.version> <pamirs.gemini.version>3.0.6</pamirs.gemini.version> <pamirs.paas.version>3.0.3</pamirs.paas.version> 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,建议请升级至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢支持!

    2022年8月15日
    1.3K00
  • 通知类

    1.通知类 1.1 站内信 当流程节点需要向用户发送消息或提示时使用站内信这个节点动作。接收人的选取类似审批节点的审批人,通知内容必填,配置完成,保存即可。 节点触发后,接收人会在全渠道运营平台-工作台-我的消息中查看到站内信。 1.2 邮件 当需要向指定邮箱发送邮件时使用邮件这个节点动作。可直接输入邮箱号,或者按照员工、部门、角色来选择,给接收人登记的邮箱发送邮件,也可以选择模型中的邮箱来发送邮件,若人员重复时只会发送一次邮件。填写主题,填写正文时可以调用当前流程中的一些模型字段的变量。 1.3 短信 发送短信需要在工作流-系统设置-短信模板中创建一个短信模板,阿里云模版新增需要一段时间审核,审核通过后就可以正常使用短信节点。短信的接收人与邮件的操作方式一致,之后选择短信模板,并且确定好变量的对应关系即可。

    2024年6月20日
    2.5K00
  • 如何使用源码的方式配置表达式

    自定义占位符定义表达式 数据权限定义表达式: ${thisTeacherName} 界面设计器查询条件定义:$#{thisTeacherName}需要加上#号 以上配置都可以通过查看queryWrapper里面的originRsql查看占位符是否被正确替换。 显隐、过滤条件表达式定义 显隐、过滤都可以加载字段注解里以及xml定义里 显隐: invisible="$!{activeRecord.deadline}" / invisible = true @Field.String @Field(displayName = "视图/页面", invisible = true) private String viewName; 过滤。 domain = " code == ${activeRecord.id} " / domain = "code == '111' " @Field.one2many @Field(displayName = "子订单列表", summary = "子订单列表") @Field.Relation(relationFields = {"code"}, referenceFields = {"code"}, domain = "code != '1234'") private List<ChildOrder> orderList; 更多获取视图数据的写法参考文章上下文在字段和动作中的应用 rsql表达式定义 参考:oinone的rsql与传统sql语法对照表

    2025年3月13日
    1.0K00

Leave a Reply

Please Login to Comment