当前位置: 首页 > news >正文

单表查询-分页提前获取数据

1、 问题

以下的例子如何优化呢?

SELECT * FROM(SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM FROM (SELECT t1.* FROM ( SELECT * FROM  T1  ) t1  WHERE 1 = 1 ORDER BY T1.TTIME DESC)INNER_TABLE ) OUTER_TABLE WHERE OUTER_TABLE_ROWNUM<=25AND OUTER_TABLE_ROWNUM >0

在这里插入图片描述

这个语句是单表全表查询排序后分页获取数据,似乎看起来没什么优化空间。分页获取前25行数据,相当于从按ttime排序后,从这批有序的数据中获取前25行数据,这里我们可以想到索引是有序的,而要提前获取数据,在达梦数据库里需要用到以下两个参数TOP_ORDER_OPT_FLAG/TOP_ORDER_ESTIMATE_CARD

2、TOP_ORDER_OPT_FLAG/TOP_ORDER_ESTIMATE_CARD

参数参数含义
TOP_ORDER_OPT_FLAG优化带有 TOP 和 ORDER BY 子句的查询,使得 SORT 操作符可以省略。优化的效果是尽量使得 ORDER BY 的排序列所对应的基表可以使用包含排序列的索引,从而可以移除排序 SORT 操作符,减少排序操作。如果排序列不属于同一个基表,或者排序列不是基表列,则无法进行优化。0:不启用该优化; 1:对最优索引进行优化; 2:优先选择与排序列一致的可以消除排序的索引进行优化
TOP_ORDER_ESTIMATE_CARDTOP_ORDER_OPT_FLAG=1/2 命中优化时,设置叶子节点的预估扫描行数。下层操作符不是简单的BT时,如果优化器预估行数不准,可帮助优化器调整,以便选择最优计划。默认300。

以上摘自《达梦数据库管理员手册》
接下来我们来看看其优化效果
首先我们创建order by中列的索引

CREATE OR REPLACE  INDEX "IDX_DM_T1" ON "T1"("TTIME" DESC)global;

然后我们使用hint看看其效果

SELECT /*+TOP_ORDER_OPT_FLAG(2)*/* FROM(SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM FROM (SELECT t1.* FROM ( SELECT * FROM  T1  ) t1  WHERE 1 = 1 ORDER BY T1.TTIME DESC)INNER_TABLE ) OUTER_TABLE WHERE OUTER_TABLE_ROWNUM<=25AND OUTER_TABLE_ROWNUM >0

在这里插入图片描述

这里提前获取300行数据,然后再分页取得25行,300也就是TOP_ORDER_ESTIMATE_CARD的配置。

3、小结

假设单表大表排序分页提前获取前几十行数据。通过增加排序列索引加上top_order_opt_flag=2即可达到优化效果。

http://www.lryc.cn/news/594848.html

相关文章:

  • 自动化与安全 - 将 Terraform 集成到 CI/CD
  • 安装pytorch(cpu版)
  • 电科金仓2025发布会,国产数据库的AI融合进化与智领未来
  • 【Lucene】SimScorer
  • 【Spring AI】Advisors API—顾问(即拦截器)
  • 轨迹优化 | 基于边界中间值问题(BIVP)的路径平滑求解器(附C++/Python仿真)
  • 6.String、StringBuffer、StringBuilder区别及使用场景
  • C++学习笔记(六:数组)
  • AI Agent与MCP Service技术进展结构化分析报告(2025Q2)
  • 解决win10下Vmware虚拟机在笔记本睡眠唤醒后ssh连接不上的问题
  • 项目研发进度安排
  • 音视频学习(四十二):H264帧间压缩技术
  • 【时时三省】(C语言基础)使用字符指针变量和字符数组的比较
  • Electron使用WebAssembly实现CRC-16 原理校验
  • Java 二叉树
  • C++11之右值引用与移动语义(提高效率)重要
  • 【Linux指南】Linux系统 -权限全面解析
  • Jetpack ViewModel LiveData:现代Android架构组件的核心力量
  • 病历数智化3分钟:AI重构医院数据价值链
  • AI+Python | 长时序植被遥感:动态·物候·变异归因·RSEI生态评估全流程[特殊字符]
  • C语言(20250718)
  • 车载电子电器架构 --- MCU信息安全相关措施
  • 基于springboot+vue+mysql的在线教育系统(源码+论文)
  • 深入详解随机森林在医学图像质量评估中的应用与实现细节
  • 网络编程Socket linux
  • 【Prometheus+Grafana篇】监控通过Keepalived实现的MySQL HA高可用架构
  • DeepSeek vs ChatGPT:谁更胜一筹?
  • Python 模块未找到?这样解决“ModuleNotFoundError”
  • 02-UE5蓝图初始的三个节点作用
  • RuoYi配置多数据源失效