深度分页问题优化方案

问题原因

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

相关推荐

  • 正式版发布:Oinone 6.0.0 版本 新增涡轮增压加速启动,邀您体验

    版本号: 6.0.0 版本发布日期:2025.03.17更新要点:新增涡轮增压加速启动 6.0.0 版本 启动工程关于pamirs包的扫描顺序需要进行修复 @ComponentScan( basePackages = { "pro.shushi.pamirs", } ) 20250418升级内容 镜像版本升级: 6.0.1.4 –> 6.0.2 前端版本升级 后端版本升级:6.0.1.6 –> 6.0.2 修复跨模块追加函数或模块重载时导致未启动模块元数据丢失的问题 修复登录页面语言与登录后不一致的问题 20250407升级内容 镜像版本升级: 6.0.1.3 –> 6.0.1.4 后端版本升级: 6.0.1.5 –> 6.0.1.6 修复无界面设计器环境下,标品安装元数据时因自定义组件导致的启动报错或自定义组件不生效问题 修复界面设计器部分服务无法远程调用的问题 同步更新5.7.x-20250328版本升级内容 修复在某些特殊情况下启动时,首页元数据保存错误的问题 修复界面设计器在2023年3月之前的视图无法正常发布的问题 20250326升级内容 镜像版本升级: 6.0.0.1 –> 6.0.1.3 前端版本升级 后端版本升级:6.0.1.2 –> 6.0.1.5 新增调试工具返回服务端日志的功能 修复在特殊情况下发生Class.forName死锁的问题 20250325升级内容 镜像版本升级: 6.0.0.1 –> 6.0.1.1 前端版本升级 后端版本升级:6.0.1.2 支持URL动态配置 URL动作支持计算函数 字段添加属性-字段动作配置 表格的优化。允许进行新增/复制一行等操作 表格列自动调节宽度 表单、详情动作区动作可以固定。 优化分布式持久化内存大小(内存占用约减少30%以上) 同步更新5.7.x-20250320版本升级内容 修复启动初始化Bean顺序导致空指针的问题 修复模块依赖转换错误的问题 修复跨模块继承元数据在包含jar包依赖时计算错误的问题 移除对无代码模块自动生成视图的支持 修复URL链接动作元数据无法填充compute的问题 修复工作流审批详情获取数据错误的问题 支持退回流程上文中任意人工节点 业务流程、工作流详情, 自定义审批人信息补充 修复界面设计器保存菜单时导致元数据反解析错误的问题 升级内容(6.0.0) 新增涡轮增压加速启动(启动速度约提升30%以上) 业务工程新增依赖项 <dependency> <groupId>pro.shushi.pamirs.framework</groupId> <artifactId>pamirs-framework-turbo</artifactId> </dependency> 请尽可能保证业务工程前后端服务以及设计器同步升级前端服务仅需重新执行npm run clean && npm install即可自动升级到最新版本 后端版本包信息 Oinone平台部署及依赖说明(v5.3) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <oinone.version>6.0.2</oinone.version> <!– 设计器 –> <pamirs.workflow.designer.version>6.0.0</pamirs.workflow.designer.version> <pamirs.model.designer.version>6.0.1</pamirs.model.designer.version> <pamirs.ui.designer.version>6.0.2</pamirs.ui.designer.version> <pamirs.print.designer.version>6.0.0</pamirs.print.designer.version> <pamirs.data.designer.version>6.0.1</pamirs.data.designer.version> <pamirs.dataflow.designer.version>6.0.0</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>6.0.2</pamirs.eip.designer.version> <pamirs.microflow.designer.version>6.0.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>6.0.0</pamirs.middleware.version> <pamirs.k2.version>6.0.4</pamirs.k2.version> <pamirs.framework.version>6.0.8</pamirs.framework.version> <pamirs.boot.version>6.0.6</pamirs.boot.version> <pamirs.distribution.version>6.0.4</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>6.0.0</pamirs.metadata.manager> <pamirs.designer.metadata.version>6.0.1</pamirs.designer.metadata.version> <pamirs.core.version>6.0.7</pamirs.core.version> <pamirs.workflow.version>6.0.3</pamirs.workflow.version> <pamirs.workbench.version>6.0.1</pamirs.workbench.version> <pamirs.data.visualization.version>6.0.1</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>6.0.1</pamirs.designer.common.version> <pamirs.flow.designer.base.version>6.0.2</pamirs.flow.designer.base.version> 前端版本包信息 { "@kunlun/dependencies": "6.0.3", "@kunlun/vue-ui-antd": "6.0.3", "@kunlun/vue-ui-el": "6.0.3", "@kunlun/mobile-dependencies": "6.0.0", "@kunlun/vue-ui-mobile-vant": "6.0.0", "@kunlun/mobile-workbench": "6.0.0", "@kunlun/data-designer-open-pc": "6.0.0", "@kunlun/data-designer-open-mobile": "6.0.0" } 前端详细版本信息 可通过node_modules/@kunlun查看 { "@kunlun/cache": "6.0.0", "@kunlun/dsl": "6.0.0", "@kunlun/environment": "6.0.0", "@kunlun/event": "6.0.0", "@kunlun/expression": "6.0.0", "@kunlun/meta": "6.0.0", "@kunlun/request": "6.0.0", "@kunlun/router": "6.0.0", "@kunlun/service": "6.0.0", "@kunlun/shared":…

    2025年3月17日
    87900
  • 国际化翻译

    国际化翻译功能提供了一个全面的管理平台,支持用户集中查看和搜索应用的翻译项信息,灵活地创建、导入、导出、更新翻译内容,还可以直接在页面上添加、修改翻译值。

    2024年8月28日
    1.2K00
  • 3.5.6.1 字段的配置

    字段组件类型 ttype可以配置哪些widget?本文这里把oinone平台默认支持的所有widget都进行了罗列,方便大家查阅。 字段组件匹配规则 字段组件没有严格的按组件名(widget)、字段类型(ttype)、视图组件类型(viewType)限定,而是一个匹配规则 按widget 最优先匹配 按最大匹配原则 ttype、viewType。每个属性权重一分 按后注册优先原则 通用属性 属性 属性描述 属性name 默认值 类型 标题 字段的标题名称 label – string 占位提示 一个字段的描述信息,常用于说明当前字典的范围、注意事项等 placeholder – string 描述说明 组件描述信息 hint – string 数据校验 与表单其他数据联动校验 validator – 表达式 数据校验不通过提示 数据校验不通过提示 validatorMessage 校验失败 string 只读 字段的状态,可见,不可编辑 readonly false boolean或者表达式 隐藏 字段的状态,不,不可编辑 invisible false boolean或者表达式 必填 字段是否必填 required false boolean或者表达式 禁用 字段是否禁用 disabled false boolean或者表达式 宽度 属性在页面中的宽度 colSpan 01/02 标题排列方式 标题排列方式: 水平 , 横向 layout vertical vertical | horizontal 默认值 默认值,多值逗号分割 defaultValue – 根据不同ttype有不同的默认值类型 表3-5-6-1 字段通用属性 字段组件大全 widget为"-"表明不需要指定,是该ttype默认widget 组件名称 widget 对应ttype 属性 属性描述 属性name 默认值 类型 单行文本 – STRING 通用属性 文本类型 密码:password; 文本: text type text string 最小长度 输入框填写数据时最少输入的长度值 minLength – number 最大长度 输入框填写数据时最多输入的长度值 maxLength – number 输入格式 单行文本组件特有的属性,通过规则校验内容,提供一些常用的,也支持自定义校验正则 pattern – 正则表达式 输入格式不通过 输入格式不通过提示语 tips 校验失败 string 显示计数器 设置输入框是否显示字数计数器 showCount FALSE boolean 显示清除按钮 设置输入框是否有一键清除的按钮及功能 allowClear TRUE TRUE 支持前缀 开启前缀 showPrefix FALSE boolean 支持后缀 开启后缀 showSuffix FALSE boolean 前缀类型 ICON: 图标; TEXT:文本 prefixType – string 后缀类型 ICON: 图标; TEXT:文本 suffixType – string 前缀内容 文本内容或者图标引用名 prefix – string 后缀内容 文本内容或者图标引用名 suffix – string 前缀存储 前缀存储, 仅前缀类型为文本可用 prefixStore – boolean 后缀存储 后缀存储, 仅后缀类型为文本可用 suffixStore – boolean 多行文本 -…

    2024年5月23日
    1.2K00
  • 【前端】低无一体部署常见问题

    如何检查上传的SDK是否有效? 1. 在任意页面刷新后,查看是否发起【查询SDK组件】的请求。 2. 在返回的js和css列表中是否能找到在界面设计器上传的js和css文件。 3. 检查浏览器的Console中是否有组件相关报错。 4. 检查sdk中是否包含了启动工程未加入的包依赖。 启动工程包依赖:main.ts VueOioProvider( { dependencies: { vue: import('vue'), lodashEs: import('lodash-es'), antDesignVue: import('ant-design-vue'), elementPlusIconsVue: import('@element-plus/icons-vue'), elementPlus: import('element-plus'), kunlunDependencies: import('@kunlun/dependencies'), kunlunVueUiAntd: import('@kunlun/vue-ui-antd'), kunlunVueUiEl: import('@kunlun/vue-ui-el') } } ); SDK依赖:rollup.config.ts const globals = { vue: 'vue', 'lodash-es': 'lodashEs', 'ant-design-vue': 'antDesignVue', '@element-plus/icons-vue': 'elementPlusIconsVue', 'element-plus': 'elementPlus', '@kunlun/dependencies': 'kunlunDependencies', '@kunlun/vue-ui-antd': 'kunlunVueUiAntd', '@kunlun/vue-ui-el': 'kunlunVueUiEl', '@kunlun/mobile-dependencies': 'kunlunMobileDependencies', '@kunlun/vue-ui-mobile-vant': 'kunlunVueUiMobileVant' }; 上述两个文件配置的依赖和对应名称必须匹配才能在sdk上传后正常运行,否则会出现内存变量无法共享的问题。 当未发起【查询SDK组件】的请求时如何处理? 1. 在任意页面刷新后,查看manifest.js加载路径。 业务工程通常为:http://${host}:${port}/manifest.js 设计器镜像中通常为:http://${host}:${port}/config/manifest.js 2. 若未正确加载manifest.js,则在dist目录中根据请求路径添加manifest.js文件。此文件称为运行时配置文件,可点击查看参考文档。 runtimeConfigResolve({ plugins: { usingRemote: true } });

    低无一体 2023年11月1日
    1.5K00
  • 4.7.8.16版本升级说明-20240618

    版本号: 4.7.8.16 版本发布日期:2024.06.18更新要点:修复界面设计器创建菜单异常的问题 4.7.8.16 版本 升级内容 修复界面设计器创建菜单异常的问题 版本包信息 未使用到的版本号请忽略,按项目中使用到的进行替换 <!– 平台基础 –> <pamirs.middleware.version>4.7.8.3</pamirs.middleware.version> <pamirs.k2.version>4.7.8.5</pamirs.k2.version> <pamirs.framework.version>4.7.8.11</pamirs.framework.version> <pamirs.boot.version>4.7.8.8</pamirs.boot.version> <pamirs.distribution.version>4.7.8.3</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>4.7.8</pamirs.metadata.manager> <pamirs.core.version>4.7.8.10</pamirs.core.version> <pamirs.workflow.version>4.7.8.9</pamirs.workflow.version> <pamirs.workbench.version>4.7.8</pamirs.workbench.version> <pamirs.data.visualization.version>4.7.8</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>4.7.8</pamirs.designer.common.version> <pamirs.flow.designer.base.version>4.7.8.1</pamirs.flow.designer.base.version> <pamirs.workflow.designer.version>4.7.8</pamirs.workflow.designer.version> <pamirs.model.designer.version>4.7.8</pamirs.model.designer.version> <pamirs.ui.designer.version>4.7.8.9</pamirs.ui.designer.version> <pamirs.data.designer.version>4.7.8</pamirs.data.designer.version> <pamirs.dataflow.designer.version>4.7.8.1</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>4.7.8.1</pamirs.eip.designer.version> 注意镜像名称变化 体验镜像:(所有中间件及前后端服务,包含全部设计器)docker pull harbor.oinone.top/oinone/oinone-designer-full-v4.8:4.8.7.1 部署镜像:(包含前后端服务,包含全部设计器)docker pull harbor.oinone.top/oinone/oinone-designer-mini-v4.8:4.8.7.1 流程设计器镜像:(包含前后端服务,仅包含流程设计器)docker pull harbor.oinone.top/oinone/workflow-designer-v4.8:4.8.7.1 流程设计器镜像:(包含前后端服务,仅包含流程设计器,非外部库镜像)docker pull harbor.oinone.top/oinone/workflow-designer-standard-v4.8:4.8.7.1 独立部署流程设计器JAR:(包含前后端服务,仅包含流程设计器)pamirs-workflow-designer-boot-4.8.7.1.jar 后端无代码设计器Jar包启动方法 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,请及时更新至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢!

    2024年6月18日
    1.3K00

Leave a Reply

登录后才能评论