深度分页问题优化方案

问题原因

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

相关推荐

  • 【前端】低无一体部署常见问题

    如何检查上传的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日
    3.0K00
  • 正式版发布:Oinone 6.3.0 版本 集成设计器新增 MCP,流程设计器优化,邀您体验

    版本号: 6.3.0 版本发布日期:2025.09.05更新要点:集成设计器新增 MCP,流程设计器优化 6.3.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 20260430 镜像版本升级: 6.3.11.1 –> 6.3.12 后端版本升级: 6.3.11.1 –> 6.3.13 Excel模版定义(ExcelHelper)新增支持列宽自适应API; 同步导入支持业务异常信息提示到页面; 导出如果无数据生成空文件(解决:目前无数据浏览器显示一串JSON问题) 修复逻辑删除未更新[更新时间]的问题,涉及到gauss、postgresql、kdb、oracle 和 sqlsever; 优化postgresql等字段大小写敏感导致第二次启动失败问题。 20260119 镜像版本升级: 6.3.10.1 –> 6.3.11.1 后端版本升级: 6.3.10.1 –> 6.3.11.1 前端版本升级 修复语言保存时毫秒格式验证错误的问题 修复元数据导入时菜单无法更新动作的问题 修复工作流集成接口在某些情况下参数处理错误的问题 20260109 升级此版本需要开启元数据全量刷新 pamirs.distribution.session.allMetaRefresh=true 镜像版本升级: 6.3.9 –> 6.3.10.1 后端版本升级: 6.3.9 –> 6.3.10.1 前端版本升级 修复工作流数据安装 增加对函数操作日志 增加函数操作规则设置 用户登录日志增加扩展点 时间格式支持毫秒 Eip日志增加毫秒支持 优化导出API 的文档结构 点击查看用户手册 集成接口日志参数信息支持 JSON/XML 格式切换及一键复制 点击查看用户手册 数据库 API 支持格式化 / 压缩SQL格式 点击查看用户手册 数据流程增加毫秒支持 语言增加毫秒支持 集成接口和开发接口日志统计增加日期范围筛选 增加标准心跳检查 trigger增加扩展点,适配多租户场景 增加导入文件URL错误,获取不到JSON的日志 解决元数据增强可能出现的死循环 20251229 升级内容 镜像版本升级: 6.3.8.2 –> 6.3.9 后端版本升级: 6.3.8 –> 6.3.9 前端版本升级 修复工作流元数据安装异常的问题 前端包名变更:@kunlun/vue-grid-layout@2.3.13 –> @oinone/vue-grid-layout@2.3.13 前端包名变更:webpack-aliyun-oss@0.5.2 –> @oinone/webpack-aliyun-oss@0.5.2 npmrc 统一配置 registry=https://registry.npmmirror.com/ @oinone:registry=http://nexus.shushi.pro/repository/kunlun/ legacy-peer-deps=true 20251218 升级内容 镜像版本升级: 6.3.7.1 –> 6.3.8.2 后端版本升级: 6.3.7 –> 6.3.8 前端版本升级 新增 SaaS 租户扩展包 界面设计器上传图片组件新增cdnKey配置 修复主表格行内编辑错误更新关联关系对象的问题 修复业务审计导出按钮无法配置权限的问题 修复导入/导出任务在某些情况下模块名称未正确显示的问题 修复体验镜像RocketMQ无法正常启动的问题 20251217 升级内容 镜像版本升级: 6.3.7 –> 6.3.7.1 前端版本升级 修复 minLength 和 maxLength 配置 -1 时未正确移除验证的问题 修复工作流节点预览页面无法正常查看的问题 20251211 升级内容 镜像版本升级: 6.3.6 –> 6.3.7 后端版本升级: 6.3.6 –> 6.3.7 修复默认视图标题为空的问题 修复界面设计器导出时无法导出上游菜单的问题 修复元数据导入时无代码模型未正确安装的问题 20251127 升级内容 镜像版本升级: 6.3.5.1 –> 6.3.6 后端版本升级: 6.3.5.1 –> 6.3.6 前端版本升级 工作流表格切换、添加审批人表格列宽度塌陷 修复在画布被滚动后缩放中心偏移问题 流程设计器与流程图添加平移功能 流程图在拖拽与平移时添加边界检测 管理中心员工和用户名称修改同步工作流委托与交接实现变更 修复数据可视化交叉表查询异常的问题 20251126 升级内容 镜像版本升级: 6.3.5 –> 6.3.5.1 后端版本升级: 6.3.5 –> 6.3.5.1…

    2025年9月5日
    2.0K00
  • 集成平台

    1. 集成介绍 集成是指平台应用与外部系统之间的集成,平台内部应用之间直接内部服务调用。 在讲解集成设计之前先了解以下概念: 集成资源:在实际业务场景中需要将多个系统打通,针对单一的一方,我们称之为集成资源。集成资源可以是具体的数据服务合集,例如系统应用、数据库、FTP服务、域控服务等。 连接器:连接具体集成资源,以供后续实际集成时使用的connector。 数据流程:通过流程编排的方式,让集成也可以可视化的处理,提升集成作业效率。 集成平台通过连接器、数据流程的编排实现与外部系统的数据互通,包括:连接器、数据流程、流程日志三部分功能。 集成操作整体流程: 2. 连接器 支持集成应用、数据库两大类型的资源。 页面操作包括:新增、编辑、查看引用、删除,点击卡片进入API列表管理接口。 2.1 连接器之应用 2.1.1 新增应用 操作入口:在连接器、应用Tab页面——新增应用资源。 2.1.2 编辑应用 编辑应用同新增页面信息,不做赘述。 2.1.3 删除应用 允许删除未被引用的应用,已被引用的不允许删除。 2.1.4 应用详情 点击应用卡片进入应用详情,查看应用基础信息、集成的接口清单。 2.1.5 API接口 操作入口:新增资源后,点击连接器卡片,进入API管理页面。 页面操作:新增、删除、编辑、详情、返回连接器。 2.1.5.1 新增API 输入基础信息、请求参数、定义响应结果; API URL支持: 协议类型:HTTP/HTTPS Verb:GET、POST、PUT、DELETE 参数类型支持:Long、Double、String、Boolean、Integer、Date、Void、Object。 2.1.5.2 新增WebService 输入基础信息、请求参数、定义响应结果; API URL支持: 协议类型:HTTP/HTTPS Verb:POST 参数类型支持:Long、Double、String、Boolean、Integer、Date、Void、Object。 2.1.5.3 编辑 编辑同新增页面信息,不做赘述。 2.1.5.4 删除 删除API接口后不能继续使用,请慎重。 2.1.6 查看引用 查看引用应用资源的接口。 2.2 连接器之资源 2.2.1 新增数据库资源 操作入口:在连接器页面,切换到数据库页面——新增DB资源。 2.2.2 编辑应用 编辑应用同新增页面信息,不做赘述。 2.2.3 删除应用 允许删除未被引用的应用,已被引用的不允许删除。 2.2.4 查看引用 查看引用数据库的接口。 2.2.5 数据库详情 点击应用卡片进入数据库连接器详情,查看应用基础信息、集成的接口清单,新增API。 2.2.6 API接口 2.2.6.1 新增API 输入基础信息、请求参数、数据库操作、定义响应结果。 2.2.6.2 编辑 编辑同新增页面信息,不做赘述。 2.2.6.3 删除 删除API接口后不能继续使用,请慎重。 3. 数据流程 3.1.1 数据流程介绍 数据流程:通过流程编排的手段,可视化的配置、处理集成的数据流程,提升集成作业效率。 主要包含基本操作和流程设计两个部分。前者包含了流程的新增、删除、复制、停用/启用、设计/编辑、搜索。后者包含单一流程的基础信息修改、流程设计、参数配置、保存、发布。 3.1.2 流程的基本操作 3.1.2.1 新增流程 新增流程,点击后进入流程设计页面,流程名默认为“未命名流程”,可自行修改。 3.1.2.2 设计/编辑 点击编辑进入该流程的设计页面。 3.1.2.3 停用/启用 流程需要更新或暂时不用时可以使用停用功能。流程停用后将不会执行流程,正在执行中的流程不受停用影响。 针对停用流程,点击启用按钮,流程恢复启用状态,可正常触发。 3.1.2.4 复制 遇到流程节点动作相似度较高的情况可以使用复制流程的功能,点击按钮后生成一个“原流程名-复制”的流程,并且进入新流程的流程设计界面。 3.1.2.5 删除 遇到流程创建有误,没有使用过且将来也不会使用该流程,可以删除流程。需要注意的是,删除流程的前提是该流程已停用,并且该流程从未执行过。 3.1.3 流程设计 通过新增、编辑/设计动作进入流程设计页后,可以进行流程名称、流程说明的编辑,可以进行流程设计,流程参数配置,保存和发布。 3.1.3.1 流程配置 点击进入流程配置页面,若需要配置一些参数供流程使用,可在此添加和删除。删除流程参数时,若该参数已在流程中被使用则无法删除。参数支持文本、数值、日期、布尔四种类型。 3.1.3.2 保存 点击后流程设计进行存档,流程设计不完整也支持保存,下次进入流程设计回到保存的页面。 3.1.3.3 发布 第一次发布时右上角发布显示文字为发布流程,后续发布按钮显示文字为更新发布。发布后流程才会按照设计触发,首次发布和更新发布的逻辑一致,若流程中有未解决的错误则无法发布不成功,发布成功后页面跳转到显示全部流程的页面,流程状态为已启用、已更新。 3.1.4 流程触发 新增的流程设计页面默认包含两个节点,一个是流程的触发节点:确定流程开始的条件;另一个是流程结束的节点。 流程触发方式有定时触发、消息触发两种方式,未设置流程触发方式时无法继续添加后续流程节点,同时无法进行流程发布,如左下图。触发方式设置完成后,可从左侧菜单栏拖入或流程箭头中的加号点击添加节点动作,如下图。 3.1.4.1 定时触发 定时触发适用于周期性调用流程的场景,设置流程第一次执行的时间,配置循环的周期间隔。 3.1.4.2 消息触发 消息触发方式下,识别消息任务的唯一标识,标识可复用。在发送消息时,必须匹配定义的消息标识。 3.1.5节点动作 3.1.5.1 集成服务 集成服务API,选择集成的应用、此应用下的API,配置相应的参数。 3.1.5.2 数据处理 【新增数据】节点:同流程设计器; 【更新数据】节点:同流程设计器; 【获取数据】节点:同流程设计器; 【删除数据】节点:同流程设计器; 【更新流程参数】节点:同流程设计器; 【引用逻辑】节点:同流程设计器; 3.1.5.3 构建 【延时】节点:同流程设计器; 【条件分支】节点:同流程设计器; 【子流程】节点:同流程设计器; 【循环】节点 循环模式:次数循环、列表循环; 次数循环:需配置循环开始值、循环结束值、循环步长; 列表循环:配置需要循环的列表; 均使用表达式配置相应字段, 3.1.5.4 通知消息 【站内信】节点:同流程设计器; 【邮件】节点:同流程设计器; 【短信】节点:同流程设计器; 4. 流程日志 查看流程执行的情况,包括执行状态、执行时间、执行时长,针对异常流程,可以重试。 详情:查看流程日志、日志详情。

    2024年6月20日
    2.5K00
  • 管理中心

    管理中心由原「合作伙伴中心」「用户中心」「权限」3部分构成。

    2024年8月29日
    1.6K00
  • 正式版发布:Oinone 5.7.0 版本 新增打印设计器、低无一体,邀您体验

    版本号: 5.7.0 版本发布日期:2025.02.13更新要点:新增打印设计器、低无一体 5.7.0 版本 升级说明及步骤(已升级为5.0.0版本忽略) 5.7.x版本以后无法通过4.7.8版本进行升级,请先升级到5.2.x版本进行权限迁移后再升级至5.7.x版本 启动工程关于pamirs包的扫描顺序需要进行修复 @ComponentScan( basePackages = { "pro.shushi.pamirs", } ) 20251211升级内容 镜像版本升级: 5.7.4.23 –> 5.7.4.24 后端版本升级: 5.7.4.19 -> 5.7.4.20 修复元数据导入时无代码模型未正确安装的问题 20251126升级内容 镜像版本升级: 5.7.4.21 –> 5.7.4.23 后端版本升级: 5.7.4.17 -> 5.7.4.19 修复流程设计器元数据导入导出异常的问题 修复 sql_record 在某些情况下未正确触发的问题 20251107升级内容 镜像版本升级: 5.7.4.20 –> 5.7.4.21 后端版本升级: 5.7.4.16 -> 5.7.4.17 修复权限的动作节点名称未翻译的问题 20250818升级内容 镜像版本升级: 5.7.4.18 –> 5.7.4.20 后端版本升级: 5.7.4.15 -> 5.7.4.16 修复从上游生成的菜单无法正确导出的问题 修复元数据继承计算未正确处理由界面设计器创建的提交动作的问题 修复界面设计器复制视图到子模型时无法复制提交动作的问题 20250612升级内容 镜像版本升级: 5.7.4.17 –> 5.7.4.18 后端版本升级: 5.7.4.14 -> 5.7.4.15 修复Excel导出未正确翻译的问题 20250610升级内容 镜像版本升级: 5.7.4.16 –> 5.7.4.17 后端版本升级: 5.7.4.13 -> 5.7.4.14 修复模型导出数据序列异常的问题 修复工作流填写和审批节点无法正常修改触发节点多对一字段的问题 20250427升级内容 镜像版本升级: 5.7.4.15 –> 5.7.4.16 后端版本升级: 5.7.4.12 -> 5.7.4.13 修复增强模型由于继承计算错误导致无法正常更新的问题 20250425升级内容 镜像版本升级: 5.7.4.14 –> 5.7.4.15 前端版本升级 后端版本升级: 5.7.4.11 -> 5.7.4.12 修复上游模块计算时显示名称、是否显示等属性未正确处理的问题 修复应用中心编辑时依赖模块计算错误的问题 修复工作流使用整个流程结束后保存时无法正常保存的问题 20250424升级内容 镜像版本升级: 5.7.4.13 –> 5.7.4.14 前端版本升级 修复o2m、m2m字段表格默认排序字段没有回填 20250417升级内容 镜像版本升级: 5.7.4.12 –> 5.7.4.13 前端版本升级 后端版本升级: 5.7.4.10 -> 5.7.4.11 修复跨模块追加函数或模块重载时导致未启动模块元数据丢失的问题 修复登录页面语言与登录后不一致的问题 20250407升级内容 镜像版本升级: 5.7.4.11 –> 5.7.4.12 后端版本升级: 5.7.4.9 -> 5.7.4.10 修复无界面设计器环境下,标品安装元数据时因自定义组件导致的启动报错或自定义组件不生效问题 修复界面设计器部分服务无法远程调用的问题 20250328升级内容 镜像版本升级: 5.7.4.10 –> 5.7.4.11 后端版本升级:5.7.4.9 修复在某些特殊情况下启动时,首页元数据保存错误的问题 修复界面设计器在2023年3月之前的视图无法正常发布的问题 20250320升级内容 镜像版本升级: 5.7.4.8 –> 5.7.4.10 前端版本升级 后端版本升级:5.7.4.8 修复启动初始化Bean顺序导致空指针的问题 修复模块依赖转换错误的问题 修复跨模块继承元数据在包含jar包依赖时计算错误的问题 移除对无代码模块自动生成视图的支持 修复URL链接动作元数据无法填充compute的问题 修复工作流审批详情获取数据错误的问题 支持退回流程上文中任意人工节点 业务流程、工作流详情, 自定义审批人信息补充 修复界面设计器保存菜单时导致元数据反解析错误的问题 20250317升级内容 镜像版本升级: 5.7.4.7 –> 5.7.4.8 前端版本升级 后端版本升级 修复多对多关系字段在某些特殊场景下无法正确提交的问题 修复在低代码模型中添加的无代码字段无法正确导出的问题 20250313升级内容 镜像版本升级: 5.7.4.6 –> 5.7.4.7 前端版本升级 后端版本升级 修复集成设计器soap接口调用失败的问题 修复字段权限模型搜索显示异常的问题 修复导出时表达式未正确解析的问题 修复单用户模式下session未正确续约的问题 修复在事务中使用数据审计导致内存数据变更的问题…

    2025年2月13日
    2.4K00

Leave a Reply

Please Login to Comment