当前位置: 首页 > 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.dtcms.com/a/291566.html

相关文章:

  • ni-app 对鸿蒙的支持现状
  • 【系统全面】Linux进程——基础知识介绍
  • 【智能协同云图库】智能协同云图库第二期:基于腾讯云 COS 对象存储—开发图片各功能模块
  • 从0开始的中后台管理系统
  • WebAPIs事件流与事件委托与其他事件
  • 关于JavaWeb的总结笔记
  • 【web 自动化】-6- 数据驱动DDT
  • 二叉树实现堆,咕咕咕
  • 【Windows】多标签显示文件夹
  • 【世纪龙科技】数字课程资源-新能源汽车概论
  • 《Linux 环境下 Nginx 多站点综合实践:域名解析、访问控制与 HTTPS 加密部署》​
  • 电脑 CPU、GPU 版本知识详解及查看方法
  • xformers包介绍及代码示例
  • 力扣刷题 -- 100.相同的树
  • 计算机组成原理——数据的表示与运算1
  • 【vector 迭代器用法】ans.end()[-1]
  • 如何使用Ansible一键部署Nacos集群?
  • Sentinel-2 卫星 轨道编号及数据下载
  • 影刀 RPA:批量修改 Word 文档格式,高效便捷省时省力
  • Unity 渲染管线详解与实战分析
  • ANSYS 2025 R1软件下载及安装教程|附安装文件
  • 数据结构之克鲁斯卡尔算法
  • GeoTools 自定义坐标系
  • React基础(1)
  • RS485和Modbus
  • Python 基础语法与数据类型(十五) - 异常处理
  • 把sudo搞坏了怎么修复:报错sudo: /etc/sudo.conf is owned by uid 1000, should be 0
  • 小孙学变频学习笔记(十一)关于V/F曲线的讨论
  • vue3+element-plus,el-autocomplete远程搜索,解决下拉框闪一下的问题
  • 概率论与数理统计(八)