深度分页问题优化方案

问题原因

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低代码应用平台体验

(0)
的头像
上一篇 2023年6月20日 pm4:07
下一篇 2023年11月2日 pm1:58

相关推荐

  • 5.0.4版本feature:新增默认视图支持选择默认宽度功能,请升级对应版本

    版本号: 5.0.10 版本发布日期:2024.07.26更新要点:默认视图支持选择默认宽度 5.0.10 版本 升级说明及步骤(已升级为5.0.0版本忽略) 此版本与4.7.8版本的兼容方案如下,请严格参照升级说明及步骤进行1、【重要】升级前备份base库和用户权限模块所在的库 2、【重要】升级过程执行SQL严格按照升级文档中的步骤执行。特别注意:部分SQL是要求【发布前执行】,部分SQL是要求【发布后执行】 5.0.0升级详细说明及步骤 升级内容(5.0.0) 默认视图支持选择默认宽度 文件/图片组件支持使用PamirsFile 请尽可能保证业务工程前后端服务以及设计器同步升级前端服务仅需重新执行npm install即可自动升级到最新版本 版本包信息 Oinone平台部署及依赖说明(v5.0) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <pamirs.middleware.version>5.0.2</pamirs.middleware.version> <pamirs.k2.version>5.0.8</pamirs.k2.version> <pamirs.framework.version>5.0.22</pamirs.framework.version> <pamirs.boot.version>5.0.14</pamirs.boot.version> <pamirs.distribution.version>5.0.5</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>5.0.1</pamirs.metadata.manager> <pamirs.core.version>5.0.31</pamirs.core.version> <pamirs.workflow.version>5.0.9</pamirs.workflow.version> <pamirs.workbench.version>5.0.3</pamirs.workbench.version> <pamirs.data.visualization.version>5.0.3</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>5.0.4</pamirs.designer.common.version> <pamirs.flow.designer.base.version>5.0.3</pamirs.flow.designer.base.version> <pamirs.workflow.designer.version>5.0.2</pamirs.workflow.designer.version> <pamirs.model.designer.version>5.0.2</pamirs.model.designer.version> <pamirs.ui.designer.version>5.0.12</pamirs.ui.designer.version> <pamirs.data.designer.version>5.0.2</pamirs.data.designer.version> <pamirs.dataflow.designer.version>5.0.3</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>5.0.4</pamirs.eip.designer.version> 注意镜像名称变化 镜像说明 所有镜像均使用docker manifest支持amd64和arm64架构。如镜像拉取过慢,可在对应镜像Tag添加-amd64、-arm64后缀获取单一架构镜像。 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.0:5.0.10-amd64 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.0:5.0.10-arm64 镜像拉取 镜像或JAR版本:5.0.10 体验镜像:(所有中间件及前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.0:5.0.10 部署镜像:(包含前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-mini-v5.0:5.0.10 流程设计器镜像:(包含前后端服务,仅包含流程设计器) PS:原workflow-designer-standard-v5.0镜像不再提供,请更换为该镜像。 docker pull harbor.oinone.top/oinone/workflow-designer-v5.0:5.0.10 后端镜像:(仅包含后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/designer-backend-v5.0:5.0.10 前端镜像:(仅包含前端服务,包含全部设计器) PS:前端镜像版本为独立版本,与其他镜像版本不同。原基础镜像为nginx-1.21.0版本,从5.0.8版本开始使用nginx-1.24.0版为基础镜像 docker pull harbor.oinone.top/oinone/designer-frontend-v5.0:5.0.19 独立部署所有设计器JAR:(后端服务,包含所有设计器)pamirs-designer-boot-v5.0-5.0.10.jarpamirs-designer-boot-v5.0-latest.jar 独立部署流程设计器JAR:(后端服务,仅包含流程设计器)pamirs-workflow-designer-boot-v5.0-5.0.10.jarpamirs-workflow-designer-boot-v5.0-latest.jar 后端无代码设计器Jar包启动方法 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,请及时更新至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢!

    2024年7月26日
    1.1K00
  • 5.3.0版本bugfix:弹窗和抽屉新增全屏功能,请升级对应版本

    版本号: 5.3.6 版本发布日期:2025.01.17更新要点:弹窗和抽屉新增全屏功能 5.3.0 版本 升级说明及步骤(已升级为5.0.0版本忽略) 5.3.x版本以后无法通过4.7.8版本进行升级,请先升级到5.2.x版本进行权限迁移后再升级至5.3.x版本 升级内容(5.3.0) 弹窗和抽屉标题支持表达式配置 弹窗和抽屉支持高度及全屏配置 弹窗和抽屉支持遮罩交互配置 新增动作的二次确认支持表达式配置 动作执行后新增关闭所有弹窗开关 优化审批、填写来源合并 修复动作上下文的value配置false不生效 修复模型导出无法导出数据字典的问题 修复折线图对比数据显示错误 优化协同开发时ownSign参数优先与schedule的ownSign生效 修复统计图表添加多个数值的时候,属性面板发生变化后设计区域没有更新 修复界面设计器图表的查询条件不回填 修复图表的动态条件无法正确覆盖的问题 请尽可能保证业务工程前后端服务以及设计器同步升级前端服务仅需重新执行npm run clean && npm install即可自动升级到最新版本 后端版本包信息 Oinone平台部署及依赖说明(v5.1) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <oinone.version>5.3.6.2</oinone.version> <!– 设计器 –> <pamirs.workflow.designer.version>5.3.0</pamirs.workflow.designer.version> <pamirs.model.designer.version>5.3.6</pamirs.model.designer.version> <pamirs.ui.designer.version>5.3.6</pamirs.ui.designer.version> <pamirs.data.designer.version>5.3.0</pamirs.data.designer.version> <pamirs.dataflow.designer.version>5.3.0</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>5.3.0</pamirs.eip.designer.version> <pamirs.microflow.designer.version>5.3.0</pamirs.microflow.designer.version> <dependencyManagement> <dependencies> <dependency> <groupId>pro.shushi</groupId> <artifactId>oinone-bom</artifactId> <version>${oinone.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> oinone-bom详细版本信息 <!– 平台基础 –> <pamirs.middleware.version>5.2.3</pamirs.middleware.version> <pamirs.k2.version>5.3.1</pamirs.k2.version> <pamirs.framework.version>5.3.3</pamirs.framework.version> <pamirs.boot.version>5.3.3</pamirs.boot.version> <pamirs.distribution.version>5.3.1</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>5.3.1</pamirs.metadata.manager> <pamirs.designer.metadata.version>5.3.2</pamirs.designer.metadata.version> <pamirs.core.version>5.3.9</pamirs.core.version> <pamirs.workflow.version>5.3.9</pamirs.workflow.version> <pamirs.workbench.version>5.3.0</pamirs.workbench.version> <pamirs.data.visualization.version>5.3.2</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>5.3.0</pamirs.designer.common.version> <pamirs.flow.designer.base.version>5.3.7</pamirs.flow.designer.base.version> 前端版本包信息 { "@kunlun/vue-dependencies": "5.3.15", "@kunlun/vue-ui-antd": "5.3.15", "@kunlun/vue-ui-el": "5.3.15", "@kunlun/vue-mobile-dependencies": "5.3.6", "@kunlun/vue-ui-mobile-vant": "5.3.6", "@kunlun/mobile-workbench": "5.3.6", "@kunlun/data-designer-open-pc": "5.3.0", "@kunlun/data-designer-open-mobile": "5.3.0" } 前端详细版本信息 可通过node_modules/@kunlun查看 { "@kunlun/cache": "5.3.5", "@kunlun/dsl": "5.3.5", "@kunlun/environment": "5.3.5", "@kunlun/event": "5.3.5", "@kunlun/expression": "5.3.5", "@kunlun/meta": "5.3.5", "@kunlun/request": "5.3.5", "@kunlun/router": "5.3.5", "@kunlun/service": "5.3.5", "@kunlun/shared": "5.3.5", "@kunlun/spi": "5.3.5", "@kunlun/state": "5.3.5", "@kunlun/theme": "5.3.5", "@kunlun/engine": "5.3.6", "@kunlun/vue-admin-base": "5.3.15", "@kunlun/vue-admin-layout": "5.3.15", "@kunlun/vue-dependencies": "5.3.15", "@kunlun/vue-router": "5.3.15", "@kunlun/vue-ui": "5.3.15", "@kunlun/vue-ui-antd": "5.3.15", "@kunlun/vue-ui-common": "5.3.15", "@kunlun/vue-ui-el": "5.3.15", "@kunlun/vue-widget": "5.3.15", "@kunlun/vue-expression": "5.3.1", "@kunlun/vue-mobile-base": "5.3.6", "@kunlun/vue-mobile-dependencies": "5.3.6", "@kunlun/vue-ui-mobile-vant": "5.3.6", "@kunlun/mobile-workbench": "5.3.1", "@kunlun/data-designer-core": "5.3.0", "@kunlun/data-designer-core-mobile": "5.3.0", "@kunlun/data-designer-core-pc": "5.3.0", "@kunlun/data-designer-open-mobile": "5.3.0", "@kunlun/data-designer-open-pc": "5.3.0" } 镜像说明 所有镜像均使用docker manifest支持amd64和arm64架构。如镜像拉取过慢,可在对应镜像Tag添加-amd64、-arm64后缀获取单一架构镜像。 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.3:5.3.6.2-amd64 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.3:5.3.6.2-arm64 镜像拉取 镜像或JAR版本:5.3.6.2 体验镜像:(所有中间件及前后端服务,包含全部设计器) docker…

    2025年1月16日
    5.3K00
  • 3.5.2.1 整体介绍

    虽然我们有小眼睛可以让用户自定义展示字段和排序喜好,以及通过权限控制行、列展示,但在我们日常业务开发中还是会对页面进行调整,以满足业务方的对交互友好和便捷性的要求。本节会在如何自定义之前我们先介绍页面结构与逻辑,再带小伙伴一起完成自定义view的Template和Layout,以及整个母版的Template和Layout 页面的构成讲解 页面交互拓扑图 页面交互拓扑图 图3-5-2-1 页面交互拓扑图 注:页面逻辑交互拓扑图说明 模块作为主切换入口 模块决定菜单列表 菜单切换触发点击action 前端根据Mask、View进行渲染, a. Mask是母版是确定了主题、非主内容分发区域所使用组件和主内容分发区域联动方式的页面模板。全局、应用、视图动作、视图都可以通过mask属性指定母版 bMask和View都是有layout定义和template定义合并而成,系统会提供默认母版,以及为每种视图提供默认layout c. layout与template通过插槽进行匹配 Action根据不同类型做出不同访问后端服务、url跳转、页面路由、发起客户端动作等 Aciton路由可以指定Mask、视图组件的layout、template a. 当layout没有指定的时候则用系统默认的 b. 当template没有指定的时候,且视图组件相同类型有多条记录时,根据优先级选取 Mask和视图组件的layout优先级(视图组件>视图动作 > 应用 > 全局) 默认母版以及各类视图组件 母版布局 默认母版基础布局base-layout <mask layout="default"> <header slot="header"/> <container slot="main" name="main"> <sidebar slot="sidebar"/> <container slot="content"/> </container> <footer slot="footer"/> </mask> 图3-5-2-2 默认母版基础布局base-layout 母版template <mask layout="default"> <mask name="defaultMask"> <template slot="header"> <container name="appBar"> <element widget="logo"/> <element widget="appFinder"/> </container> <container name="operationBar"> <element widget="notification"/> <element widget="dividerVertical"/> <element widget="languages"/> </container> <element widget="userProfile"/> </template> <template slot="sidebar"> <element widget="navMenu"/> </template> <template slot="content"> <element widget="breadcrumb"/> <element widget="mainView"/> </template> </mask> 图3-5-2-3 母版template 注: 上例中因为名称为main的插槽不需要设置更多的属性,所以在template中缺省了main插槽的template标签。 最终可执行视图 <mask name="defaultMask"> <header> <container name="appBar"> <element widget="logo"/> <element widget="appFinder"/> </container> <container name="operationBar"> <element widget="notification"/> <element widget="dividerVertical"/> <element widget="languages"/> </container> <element widget="userProfile"/> </header> <container name="main"> <sidebar name="sidebar"> <element widget="navMenu"/> </sidebar> <container name="content"> <element widget="breadcrumb"/> <element widget="mainView"/> </container> </container> <footer/> </mask> 图3-5-2-4 最终可执行视图 表格视图布局 默认表格视图基础布局base-layout <view type="table"> <view type="search"> <element widget="search" slot="search"> <xslot name="fields" slotSupport="field" /> </element> </view> <pack widget="fieldset"> <element widget="actionBar" slot="actions" slotSupport="action" /> <element widget="table" slot="table"> <xslot name="fields" slotSupport="field" /> <element widget="actionsColumn" slot="actionsColumn"> <xslot name="rowActions" slotSupport="action" /> </element> </element> </pack> </view> 图3-5-2-5 默认表格视图基础布局base-layout 注:table标签的子标签为column组件,如果field填充到元数据插槽fields没有column组件将自动包裹column组件。 表格视图template <view type="table" model="xxx" name="tableViewExample">…

    2024年5月23日
    1.4K00
  • 5.2.0版本bugfix:修复权限节点加载错误的问题,请升级对应版本

    版本号: 5.2.21 版本发布日期:2025.02.12更新要点:修复权限节点加载错误的问题 5.2.0 版本 升级说明及步骤(已升级为5.0.0版本忽略) 此版本与4.7.8版本的兼容方案如下,请严格参照升级说明及步骤进行1、【重要】升级前备份base库和用户权限模块所在的库 2、【重要】升级过程执行SQL严格按照升级文档中的步骤执行。特别注意:部分SQL是要求【发布前执行】,部分SQL是要求【发布后执行】 5.0.0升级详细说明及步骤 20250311升级内容 镜像版本升级: 5.2.21.2 –> 5.2.21.4 前端版本升级 后端版本升级 修复子流程参数传递异常的问题 webService接口来源上下文修改 流程参数传递 eip 请求 param,path,header,body取值表达式 升级内容(5.2.0) 修复权限节点加载错误的问题 移动端修复分享、催办、撤销权限控制 修复详情Tabs组件无法配置默认激活的问题 请尽可能保证业务工程前后端服务以及设计器同步升级前端服务仅需重新执行npm install即可自动升级到最新版本 后端版本包信息 Oinone平台部署及依赖说明(v5.0) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <oinone.version>5.2.21.3</oinone.version> <!– 设计器 –> <pamirs.workflow.designer.version>5.2.0</pamirs.workflow.designer.version> <pamirs.model.designer.version>5.2.12</pamirs.model.designer.version> <pamirs.ui.designer.version>5.2.15</pamirs.ui.designer.version> <pamirs.data.designer.version>5.2.5</pamirs.data.designer.version> <pamirs.dataflow.designer.version>5.2.0</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>5.2.7</pamirs.eip.designer.version> <dependencyManagement> <dependencies> <dependency> <groupId>pro.shushi</groupId> <artifactId>oinone-bom</artifactId> <version>${oinone.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> oinone-bom详细版本信息 <!– 平台基础 –> <pamirs.middleware.version>5.2.4</pamirs.middleware.version> <pamirs.k2.version>5.2.11</pamirs.k2.version> <pamirs.framework.version>5.2.18</pamirs.framework.version> <pamirs.boot.version>5.2.16</pamirs.boot.version> <pamirs.distribution.version>5.2.7</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>5.2.5</pamirs.metadata.manager> <pamirs.designer.metadata.version>5.2.5</pamirs.designer.metadata.version> <pamirs.core.version>5.2.27</pamirs.core.version> <pamirs.workflow.version>5.2.14</pamirs.workflow.version> <pamirs.workbench.version>5.2.0</pamirs.workbench.version> <pamirs.data.visualization.version>5.2.8</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>5.2.3</pamirs.designer.common.version> <pamirs.flow.designer.base.version>5.2.8</pamirs.flow.designer.base.version> 前端版本包信息 { "@kunlun/dependencies": "5.2.43", "@kunlun/vue-ui-antd": "5.2.43", "@kunlun/vue-ui-el": "5.2.43", "@kunlun/vue-mobile-dependencies": "5.2.16", "@kunlun/vue-ui-mobile-vant": "5.2.16", "@kunlun/mobile-workbench": "5.2.7", "@kunlun/data-designer-open-pc": "5.2.1", "@kunlun/data-designer-open-mobile": "5.2.1" } 前端详细版本信息 可通过node_modules/@kunlun查看 { "@kunlun/cache": "5.2.12", "@kunlun/dsl": "5.2.12", "@kunlun/event": "5.2.12", "@kunlun/expression": "5.2.12", "@kunlun/meta": "5.2.12", "@kunlun/request": "5.2.12", "@kunlun/router": "5.2.12", "@kunlun/service": "5.2.12", "@kunlun/shared": "5.2.12", "@kunlun/spi": "5.2.12", "@kunlun/state": "5.2.12", "@kunlun/theme": "5.2.12", "@kunlun/engine": "5.2.15", "@kunlun/vue-admin-base": "5.2.43", "@kunlun/vue-admin-layout": "5.2.43", "@kunlun/dependencies": "5.2.43", "@kunlun/vue-router": "5.2.43", "@kunlun/vue-ui": "5.2.43", "@kunlun/vue-ui-antd": "5.2.43", "@kunlun/vue-ui-common": "5.2.43", "@kunlun/vue-ui-el": "5.2.43", "@kunlun/vue-widget": "5.2.43", "@kunlun/vue-expression": "5.2.1", "@kunlun/vue-mobile-base": "5.2.16", "@kunlun/vue-mobile-dependencies": "5.2.16", "@kunlun/vue-ui-mobile-vant": "5.2.16", "@kunlun/mobile-workbench": "5.2.7", "@kunlun/data-designer-core": "5.2.1", "@kunlun/data-designer-core-mobile": "5.2.1", "@kunlun/data-designer-core-pc": "5.2.1", "@kunlun/data-designer-open-mobile": "5.2.1", "@kunlun/data-designer-open-pc": "5.2.1" } 镜像说明 所有镜像均使用docker manifest支持amd64和arm64架构。如镜像拉取过慢,可在对应镜像Tag添加-amd64、-arm64后缀获取单一架构镜像。 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.21.4-amd64 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.21.4-arm64 镜像拉取 镜像或JAR版本:5.2.21.4 体验镜像:(所有中间件及前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.21.4…

    2025年2月13日
    99700
  • 资源

    翻译应用是管理翻译规则的应用,以模型为基础、维护字段的翻译值,支持导入、导出 1. 操作步骤 Step1:导出所有翻译项; Step2:线下翻译; Step3:导入翻译项; Step4:刷新远程资源; Step5:页面右上角可切换语言,查看翻译效果。 2. 新增翻译 翻译是具体到模型字段,其中需要区分出是否字典; 源语言、目标语言,是在资源中维护的语言,可在资源中维护需要翻译的语言; 翻译项则是模型字段,默认翻译项为激活状态,关闭后维护的翻译项无效。 3. 导出、导入 不勾选导出:导出所有需要翻译的翻译项,包括模块、字段,源术语、翻译值等,其中如果已经翻译过的内容,会体现在翻译值中; 勾选导出:导出勾选模型的翻译项。 导入:导入翻译项,平台会根据模型拆分为多条数据。 4. 刷新远程资源 导入翻译项后,点击“刷新远程资源”按钮。 5. 查看翻译内容 页面右上角切换语言,查看翻译效果。

    2024年6月20日
    1.3K00

Leave a Reply

登录后才能评论