深度分页问题优化方案

问题原因

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

相关推荐

  • 集成接口一键发布生成开放平台接口

    1. 定义集成接口 2. 定义动态参数接口 3. 发布成开放平台接口 3.1 一键勾选多个发布开放平台,可重复发布 3.2 查看开发平台接口列表 3.3 查看开发平台接口详情 3.4 查看开发平台接口详情 4. 创建生成开放平台授权应用 5. postman模拟请求 5.1 获取Oinone开发平台APIKEY和APISecret 在开发接口列表中找到对应授权应用,点击查看密钥,获得APIKEY和APISecret 5.2 请求接口生成accessToken 接口请求 curl –location –request POST 'http://localhost/openapi/get/access-token' \ –header 'appKey: d63cb1d2c2af4e6b95f36b172804e2cc' \ –header 'appSecret: aQ0BwU/vpcLTm5swRaqXW6O5RUdrwOFGJF2nt2I4boIe7luRzul7y8msnKZuPKtvKprmGpw8z29+djBTUkKaV3zBZ4ZPSbaOkiiTB0AQvoPnPBnHxpF6M8xxDlS13hCRy0D01pcc8DbEwWYPetvp7j8WwLL6q3FusJaZPISPLuucT1hxnrCIA2fe72X7UxojROtOfBvYw6+JFv0E8xwrGLfXXX99wbTywuMzhEoqv64dYR2tfNLubua1xJnf/iAhFao+gw7y/44CZ1u3sUpFeIn5T9MnXB3BDVJnanSZTsxnl5wWY9HojrqtSfPJpcd59OKEmehpbHT9++muvDHgdM5zhbS6NhgSXKdH/kOQEP695RcB09AJxHIwcNF6hv4wGBNsAzHFUMx2QTgwHLONmFjx85ZNkp1iD8L3CYn+5kH2FAO+PG9KG/HvJRGoiViF53LyCSzf5FKj0uUY4QCHbTXXNfCE2L04PNlRj1Hj17JKxcTQ6ea1GsslYG5GjiOET2mRWw+DdnxK6S3GGR0pudRD3K22eG+ZLe/IY4sbMmJfAh8daYtOGcDuoiNXXbUUsf9uSgDDBihXy9ajNQUh8qIHb+N5dqbm/o69WLPUYVYvUzWZt23LHCLj1G8iZTTgkPmdhBsXGRcCBtyMpA7Vfci1TuBzuKrLPnB51T2hGhw=' 响应结果 { "access_token": "P0ztlcF+cL0RmRwTqjw6+i03NPScjdJptXQu4W98h0mssJl/5Bsg095ohzdCQtQu", "success": true, "errorCode": 0, "expires_time": 7200, "errorMsg": "ok" } 5.3 模拟请求钉钉接口 接口请求 curl –location 'http://localhost/openapi/dingtalk/api/v1.0/oauth2/accessToken' \ –header 'accessToken: P0ztlcF+cL0RmRwTqjw6+i03NPScjdJptXQu4W98h0k+xvGkaQmOCqCqKFEe5uNE' \ –header 'Content-Type: application/json' \ –data '{ "appKey": "dinguhgmdxva33gs8oaz", "appSecret": "QlxE8g7xoOCmVOZ9nGy-dqMduMstmxRFNGjENCyuwEVHa9jaxy6CioQYjEFkxHAM" }' 响应结果 { "expireIn": 7200, "accessToken": "f87a4ef669ae35879c5b1ee6237a584b", "http": { "headers": { "Content-Type": "application/json" } } } 5.3 模拟动态参数请求钉钉接口 使用postman请求是对应地址openapi/dingtalk/api/v1.0/{oauth}/accessToken需改成openapi/dingtalk/api/v1.0/:oauth/accessToken 接口请求 curl –location 'http://localhost/openapi/dingtalk/api/v1.0/oauth2/accessToken' \ –header 'accessToken: P0ztlcF+cL0RmRwTqjw6+i03NPScjdJptXQu4W98h0k+xvGkaQmOCqCqKFEe5uNE' \ –header 'Content-Type: application/json' \ –data '{ "appKey": "dinguhgmdxva33gs8oaz", "appSecret": "QlxE8g7xoOCmVOZ9nGy-dqMduMstmxRFNGjENCyuwEVHa9jaxy6CioQYjEFkxHAM" }' 响应结果 { "expireIn": 7200, "accessToken": "f87a4ef669ae35879c5b1ee6237a584b", "http": { "headers": { "Content-Type": "application/json" } } }

    2024年3月28日
    83800
  • 如何在Oinone 根据主题实现自定义组件样式

    在页面交互中,样式的变化是前端核心工作之一。本文介绍如何在Oinone平台中根据主题变化自定义组件样式。 介绍 Oinone平台提供了六种不同的主题设置,浅色大主题、浅色中主题、浅色小主题、深色大主题、深色中主题、深色小主题,默认采用浅色中主题。本文旨在指导如何在线或通过代码修改这些主题,以满足个性化需求。 基础知识 Oinone平台的默认主题为浅色中主题,用户可以根据喜好选择以下六种主题中的任何一种: 浅色大主题 浅色中主题 浅色小主题 深色大主题 深色中主题 深色小主题 在线修改主题 用户可以通过进入系统配置应用,并切换到系统风格配置菜单来在线修改主题。选择喜欢的主题并保存即可轻松更换。 代码修改主题 步骤示例 新建theme.ts文件 在项目的src目录下新建一个theme.ts文件。 定义主题变量 在theme.ts文件中定义主题名称和CSS变量,示例中将主色系替换为黑色。 export const themeName = ‘OinoneTheme’; export const themeCssVars = { ‘primary-color’: ‘black’, ‘primary-color-hover’: ‘black’, ‘primary-color-rgb’: ‘0, 0, 0’, ‘primary-color-focus’: ‘black’, ‘primary-color-active’: ‘black’, ‘primary-color-outline’: ‘black’, }; 在main.ts注册 import { registerTheme, VueOioProvider } from ‘@kunlun/dependencies’; // 引入注册主题组件 import { themeName, themeCssVars } from ‘./theme’; // 引入theme.ts registerTheme(themeName, themeCssVars);// 注册 VueOioProvider( { …other config theme: [themeName] // 定义的themeName传入provider中 }, [] ); 4: 刷新页面看效果 注意事项 确保在定义CSS变量时遵循主题设计规范。 正确引入theme.ts文件以避免编译错误。 总结 本文详细介绍了在Oinone平台中修改主题的两种方法:在线修改和代码修改。这些步骤允许开发者和用户根据个人喜好或项目需求,自定义界面的主题风格。

    2024年2月26日
    1.0K00
  • 平台更新日志 (v4)20231101

    版本号:v4.3.0发布日期:2023.11.01更新要点:支持用户可以自定义个人信息和偏好设置/引入系统配置功能/允许定制化登录页面的展示内容和风格/新增企业形象配置功能/ 支持系统风格,请及时更新 v4.3.0 平台更新内容 新增【个人设置】功能 新增系统配置功能 登录页配置 企业形象配置 系统风格 个人设置入口 系统配置入口 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,建议请升级至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢!

    2023年11月1日
    92200
  • 流程

    1. 流程介绍 日常工作和生活中到处都存在各种各样的流程,例如业务开展中的产品研发流程、产品制作流程、订单发货流程等,也有管控分险的费用报销流程、员工请假审批流程、项目立项流程等。流程设计器可以帮助公司实现流程的数字化,规范流程操作,减少人工操作并留存痕迹,提高工作效率和安全性。 2. 流程的组成 流程设计器主要包含基本操作和流程设计两个部分。前者包含了流程的新增、删除、复制、停用/启用、编辑、搜索。后者包含单一流程的基础信息修改、流程设计、参数配置、保存、发布。 2.1 流程的基本操作 流程页面有两种显示方式,默认为平铺显示的模式,可以点击切换为列表详情显示的模式。 2.1.1 新增 平铺显示和列表详情模式下点击左上角的创建按钮即可新增一个流程,点击后进入流程设计页面,流程名默认为“未命名流程”,可自行修改。 2.1.2 删除 遇到流程创建有误,没有使用过且将来也不会使用该流程,可以删除流程。需要注意的是,删除流程的前提是该流程已停用,并且该流程从未执行过。 2.1.3 复制 遇到流程节点动作相似度较高的情况可以使用复制流程的功能,点击按钮后生成一个“原流程名-复制”的流程,并且进入新流程的流程设计界面。 2.1.4 停用/启用 流程需要更新或暂时不用时可以使用停用功能。流程停用后将不会执行流程中的动作,正在执行中的流程不受停用影响,会正常执行直到流程结束。 点击启用按钮,流程恢复启用状态,可正常触发。 2.1.5 编辑 点击编辑进入该流程的设计页面。 2.1.6 搜索 页面最上方的是搜索区,可以按照流程名称、触发方式、启用状态、更新状态进行筛选搜素,点击重置按钮修改搜索条件。

    2024年1月20日
    1.2K00
  • 正式版发布:Oinone 6.4.0 版本 优化全平台界面交互,邀您体验

    版本号: 6.4.0 版本发布日期:2025.12.17更新要点:优化全平台界面交互 6.4.0 版本 GitHub: 后端: https://github.com/oinone/oinone-pamirs 前端: https://github.com/oinone/oinone-kunlun Gitee: 后端: https://gitee.com/oinone/oinone-pamirs 前端: https://gitee.com/oinone/oinone-kunlun 20251220 升级内容 镜像版本升级: 6.4.0 –> 6.4.1 前端版本升级 界面设计器上传图片组件新增cdnKey配置 修复系统权限字段丢失导致无法正常运行的问题 修复全屏按钮悬浮文案 修复快捷键提示文案 修复取消排序展示错误的问题 修复快速填报选择不粘贴时数据处理错误的问题 修复流程设计器无法编辑流程名称的问题 修复移动端打包失败的问题 修复体验镜像RocketMQ无法正常启动的问题 20251217 升级内容 镜像版本升级: 6.4.0 后端版本升级: 6.4.0 前端版本升级 优化默认视图内容展示 表格视图新增多级排序、分组、快捷键录入、行高切换与全屏模式,并优化行内编辑启用逻辑 日志记录支持刷新 画廊视图新增展示字段、卡片数量切换、排序与全屏模式 弹窗与抽屉支持互相转换、全屏展示与记录数据切换 支持隐藏按钮文字 一对多子表新增快速填报能力 优化公司、部门、角色、员工组件体验 修复文件组件在默认视图中的识别问题 优化多行文本与富文本在默认视图中的展示宽度 优化子表默认展示动作 优化操作栏被隐藏时的视图展示效果 界面设计器组件库新增展示形态切换 属性面板顶部名称支持一键复制,并将开关/复选框配置项调整为下拉选择组件 属性面板新增样式面板 操作栏新增样式配置,支持配置样式与显示数量 按钮新增“文字按钮”样式 新增选项卡、分组、布局容器、表单、表格等样式配置能力 增加“保存为草稿”组件 新增表格下拉单选/多选、弹窗单选/多选组件 优化表达式搜索能力 优化数据加载函数的可选项配置 增加单行文本输入格式设置 后端版本包信息 Oinone平台部署及依赖说明(v6.3) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <oinone-bom.version>6.4.0</oinone-bom.version> <!– 设计器 –> <pamirs.workflow.designer.version>6.4.0</pamirs.workflow.designer.version> <pamirs.model.designer.version>6.4.0</pamirs.model.designer.version> <pamirs.ui.designer.version>6.4.1</pamirs.ui.designer.version> <pamirs.print.designer.version>6.4.0</pamirs.print.designer.version> <pamirs.data.designer.version>6.4.0</pamirs.data.designer.version> <pamirs.dataflow.designer.version>6.4.0</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>6.4.0</pamirs.eip.designer.version> <pamirs.microflow.designer.version>6.4.0</pamirs.microflow.designer.version> <pamirs.ai.designer.version>6.4.0</pamirs.ai.designer.version> <dependencyManagement> <dependencies> <dependency> <groupId>pro.shushi</groupId> <artifactId>oinone-bom</artifactId> <version>${oinone-bom.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>pro.shushi.pamirs.designer</groupId> <artifactId>pamirs-model-designer-api</artifactId> <version>${pamirs.model.designer.version}</version> </dependency> <dependency> <groupId>pro.shushi.pamirs.designer</groupId> <artifactId>pamirs-ui-designer-api</artifactId> <version>${pamirs.ui.designer.version}</version> </dependency> <dependency> <groupId>pro.shushi.pamirs.dataflow</groupId> <artifactId>pamirs-dataflow-designer-api</artifactId> <version>${pamirs.dataflow.designer.version}</version> </dependency> <dependency> <groupId>pro.shushi.pamirs.designer</groupId> <artifactId>pamirs-eip-designer-api</artifactId> <version>${pamirs.eip.designer.version}</version> </dependency> </dependencies> </dependencyManagement> oinone-bom详细版本信息 <!– 平台基础 –> <oinone-pamirs.version>6.4.0</oinone-pamirs.version> <!– 元数据增强 –> <pamirs.meta.enhance.version>6.4.0</pamirs.meta.enhance.version> <!– 平台功能 –> <pamirs.distribution.version>6.4.0</pamirs.distribution.version> <pamirs.metadata.manager>6.4.0</pamirs.metadata.manager> <pamirs.designer.metadata.version>6.4.0</pamirs.designer.metadata.version> <pamirs.workflow.version>6.4.0</pamirs.workflow.version> <pamirs.workbench.version>6.4.0</pamirs.workbench.version> <pamirs.data.visualization.version>6.4.0</pamirs.data.visualization.version> <pamirs.fusion.version>6.4.0</pamirs.fusion.version> <!– 设计器 –> <pamirs.designer.common.version>6.4.0</pamirs.designer.common.version> <pamirs.flow.designer.base.version>6.4.0</pamirs.flow.designer.base.version> 前端版本包信息 { "@oinone/kunlun-dependencies": "~6.4.0", "@oinone/kunlun-vue-ui-antd": "~6.4.0", "@oinone/kunlun-vue-ui-el": "~6.4.0", "@oinone/kunlun-mobile-dependencies": "~6.4.0", "@oinone/kunlun-vue-ui-mobile-vant": "~6.4.0", "@oinone/kunlun-mobile-workbench": "~6.4.0", "@oinone/kunlun-data-designer-open-pc": "~6.4.0", "@oinone/kunlun-data-designer-open-mobile": "~6.4.0" } 前端详细版本信息 可通过node_modules/@oinone查看 { "@oinone/kunlun-cache": "6.4.0", "@oinone/kunlun-config": "6.4.0", "@oinone/kunlun-dsl": "6.4.0", "@oinone/kunlun-environment": "6.4.0", "@oinone/kunlun-event": "6.4.0", "@oinone/kunlun-expression": "6.4.0", "@oinone/kunlun-meta": "6.4.0", "@oinone/kunlun-request": "6.4.0", "@oinone/kunlun-router": "6.4.0", "@oinone/kunlun-service": "6.4.0", "@oinone/kunlun-shared": "6.4.0", "@oinone/kunlun-spi":…

    2025年12月17日
    35400

Leave a Reply

登录后才能评论