深度分页问题优化方案

问题原因

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
  • 工作流引入流程概览与流程监控

    流程概览依赖说明 使用 流程概览 功能前,需要在项目中引入 pamirs-workflow-datavi-core、 pamirs-data-visualization-core依赖,并启动datavi模块: <dependency> <groupId>pro.shushi.pamirs.workflow</groupId> <artifactId>pamirs-workflow-datavi-core</artifactId> </dependency> <dependency> <groupId>pro.shushi.pamirs.data.visualization</groupId> <artifactId>pamirs-data-visualization-core</artifactId> </dependency> 警告: 在 oinone 平台启用「流程概览」能力时,应用启动模块一旦引入 pamirs-workflow-api/core,必须同时引入 pamirs-workflow-datavi-api/core。在多启动模块架构下,严禁出现仅部分启动模块引入 pamirs-workflow-core 而未引入 pamirs-workflow-datavi-core 的情况,否则将导致流程概览相关元数据计算异常,出现删表等情况。 流程概览配置项 流程概览页面内置缓存机制,可通过配置项调整缓存刷新周期及图表展示的数据条数: pamirs: workflow: dashboard: cache-time: 10 # 流程概览缓存刷新时间(单位:分钟),默认 10 分钟 page-size: 10 # 流程运行分析中 4 个图表的展示数量,默认查询前 10 条数据 统计指标说明 引入 pamirs-workflow-datavi-core 依赖后,系统会按照以下规则进行数据同步: 当日数据同步:每小时同步一次当日数据; 昨日数据同步:次日凌晨同步前一日数据。 由于在引入依赖后才会开始执行数据同步,统计指标页提供了「同步」按钮,可用于对历史数据进行补采。即使不执行历史同步,也不会影响核心业务流程,仅会影响统计数据和图表的展示效果。 统计指标数据主要用于 支撑 流程概览 和 流程监控 中的统计图表展示; 为数据分析与可视化提供基础数据。 上述统计数据对工作流的审批、流转等核心业务无任何影响。如有需要,也可以基于流程监控的数据,配合数据可视化设计器,自定义构建符合业务需求的展示页面。

    2025年11月17日
    58300
  • 项目中排除掉特定的Hook和扩展点

    总体介绍 在共库共Redis的情况下,某些场景存在需要过滤掉特定Hook和扩展点(extpoint)的情况。本文介绍排除掉的配置方法 1. Oinone如何排除特定的Hook 配置: pamirs: framework: hook: excludes: – 排除的扩展点列表 示例: pamirs: framework: hook: excludes: – pro.shushi.pamirs.timezone.hook.TimezoneHookBefore – pro.shushi.pamirs.timezone.hook.TimezoneHookAfter – pro.shushi.pamirs.timezone.hook.TimezoneSessionInitHook – pro.shushi.pamirs.translate.hook.TranslateAfterHook 2. Oinone如何排除特定的扩展点 配置 pamirs: framework: extpoint: excludes: – 排除的扩展点列表 示例: pamirs: framework: extpoint: excludes: – pro.shushi.pamirs.demo.core.extpoint.PetCatTypeExtPoint

    2024年5月13日
    1.7K00
  • Oinone 是什么

    1.Oinone能做什么? Oinone 是一款专注解决复杂业务场景的开源低代码应用平台,旨在提供所见即所得的快速可视化搭建应用功能,并打造企业专属的低代码平台。 提升交付效率,缩短交付周期; 减少人力投入,解决技术人才招聘难的难题; 减少接联调,减少重复建设,解决质量管控难题; 一键轻松安装,应用全生命周期管理,解决应用管理难题; 2.为什么要用Oinone? 用Oinone低代码平台可以帮助企业应对竞争变化、适应业务变化、满足技术需求、提高研发效率,并且低代码平台已经成为企业数字化转型的核心工具之一。 企业竞争变化,从单一企业变相兼职链的网络竞争; 业务变化,从信息化时代,内部/管理/流程、结果,变向数字时代,外部/商业,运营; 技术更替,从主球稳定,安全,功能丰富可配置到系统性能极限承载能力与弹性扩容/随需而变,需求响应速度、智能;化、实时分析,数据与业务的联动,用户体验,B端的业务需求C端的体验; 对研发人员的需求越来越大,同时要求越来越高。低代码平台是提升研发效率,降低研发成本核心手段; 低代码的地位已经从辅助走向核心; 3.Oinone 和其他的无代码平台相比优势是什么 既支持无代码的拖拉拽,还能通过研发框架支持自主工程研发; 低代码和无代码在贯彻了整个软件的生命周期,在不同场景发挥不同价值; 可基于软件工程理论,进行科学管理; 不改变研发习惯,主流开源技术栈,无抵触心理 4.我是软件公司,用不用Oinone? 软件公司非常适合使用 Oinone,不管你是做标品还是定制项目,都非常适合使用Oinone 低代码:构建软件快速开发标准,让研发专注在业务创新本身 快速实施个性化需求、或开发简单和应急应用 5.我们公司产品迭代很快,用不用Oinone? 无代码:使用Oinone 可以快速的响应需求,以及后续迭代需求; 集成平台:快速的是实施集成方案,一次配置,终身受用; 低代码:降低技术复杂度,提升研发效率,让研发专注于业务本身; 6.我们公司产品bug很多,用不用Oinone? 很多公司都有这样的痛点,一直有BUG ,反复修反复出现,重构成本非常大,比如项目预算有限,无法支撑重新构建,技术栈老旧,研发人员比较少,Oinone 提供以下解决方案: 同步原系统数据回流处理后数据; 原系统数据扩展处理新业务逻辑; 7..我用的是JAVA 技术栈,我还需要用Oinone么? 在探讨低代码平台的合作时,首先需要确认的是,如果您之前使用的是Java技术栈,那么低代码平台是否能够生成相应的Java代码,包括常用的增删改查等方法。这种代码生成器与低代码平台的第一种方式——代码生成器相似,它提供了基础逻辑的生成。 针对这一层面,Oinone平台具有几个显著优势。首先,后端定义的模型或写法不仅决定了后端的数据处理,同时也影响了前端的UI展示层。其次,当前端开发时加入特定的注解,这些注解的本质是为了收集原始数据。一旦数据源被定义,编写的代码在最终运行时实际上已经转变为数据。这是与传统代码编写方式的第二个不同点。第三,尽管我们提供了代码编写的方式,但这样做的核心目的在于解决标准化产品与个性化需求之间的矛盾。在进行功能扩展时,对于工程架构和代码编写的冲击较大。 oinone的核心优势在于减少代码生成量,内置代码规范,并实现前后端无需联调。此外,无代码设计器能够理解用代码构建的模型或函数,并与之结合。 在前端方面,低代码平台也提供了相应的工程结构,允许通过添加平台依赖来引入平台功能。前端的自定义能力包括自定义模板、布局和页面,以及完全自定义视图的能力。此外,平台支持前端与后端的交互自定义,以及自定义字段的引入。 总结来说,后端定义的模型不仅决定了数据存储结构和扩展方式,还决定了前端的UI展示,并能与无代码平台结合。引入TypeScript(TS)的概念,可以帮助团队最大化逻辑复用,解决了业务组件难以沉淀的问题。通过这种方式,前后端的结合更为紧密,减少了联调的需求,提高了开发效率。

    2022年3月14日
    1.4K00
  • 第5章 Oinone的CDM

    2024年5月23日
    1.9K00

Leave a Reply

Please Login to Comment