Oracle 子查询优化思路

开头:

​ 在Oracle中,支持字段级别的子查询,允许在字段嵌套查询sql,但是在面对数据量大的情况下,其效率会变的极低

问题:

通过判断统计日期和最开始交易的日期之间工作日天数

需要通过这个天数的量级来选择不同的费率

一开始使用字段的子查询获取结果

SELECT col1,col2,col3--150 day,(SELECT count(1) FROM T_PDATES  where flag=0 and DAY<20220916 and DAY>=tablea.cfm_date ) as day,sum(col4) ,sum(col5)  FROM tablea  group by col1,col2,col3

在数据量几千的时候,速度还可以,当数据量上w的时候,速度就慢了很多

思路:

这里想要根据源表tablea的字段和另外传入的一个字段(20220916) 来确定一个时间段内的工作日天数。

原先的做法相当于对原表里的每条记录进行遍历,拿遍历的日期去(T_PDATES)进行比对count,获得对应的天数

1.优化思路是希望子查询-》关联

​ 将天数洗到日期表中T_PDATES就可以了,因为比起大数据量级别的事实表,日期表相对来说数据量稳 定且小了多个数量级

​ 所以将子查询转换为关联查询的前提可以为:子查询的那个表数量级与原表相差较大

2.如何处理数据量级别较小的表

​ 在原有的日历表中过滤出来工作日之后,将统计日期单独作为一个字段,然后给每个工作日期进行排序,获得序号

SELECT       DAY,20200916 D_date,row_number() over(order by DAY) rn ,FROM T_PDATES a  where flag=0 AND DAY <=20200916 order by DAY

接下来就是做差,我要拿每个工作日期的序号和统计日期的序号进行做差,得到的差就是相差的工作日天数

--因为引用了多次,可以将其作为临时表缓存起来
with w_tmp as (SELECT DAY,20200916 D_date,row_number() over(order by DAY) rn ,FROM T_PDATES a  where flag=0 AND DAY <=20200916 order by DAY
)
SELECT A1.DAY,A2.RN-A1.RN AS BET_DATE FROM w_tmp a1 cross join (SELECT DAY,rn FROM  w_tmp where D_date=DAY)

这样便获得了每个工作日对应到统计日期之间的天数了

由于日历表的数据量很小,基本在秒级别就可以完成了

这里仅提供思路

Oracle 子查询优化思路相关推荐

  1. Oracle表查询优化思路

    一.分页语句优化思路 正确的分页框架: SELECT *FROM (SELECT *FROM (SELECT A.*, ROWNUM AS RNFROM (需要分页的SQL) A)WHERE ROWN ...

  2. MySQL子查询优化思路

    子查询的优化最重要的优化建议是尽可能使用关联查询来代替. 因为子查询每次查询出来的结果会暂时存放在临时表里,也会进行IO,与其如此还不如直接使用join来进行关联. 当然,也并不是所有的子查询都能使用 ...

  3. Mysql深度讲解 – 子查询优化

    前言 上一篇[Mysql深度讲解 – Join语句]详细说了Join的相关内容,本篇会讲一下子查询如何优化.一般来说在正常的业务情况下大多数sql语句都会有子查询,一个表从另一个表里查询数据,本篇会通 ...

  4. oracle子查询不减少数据,Oracle性能优化-子查询到特殊问题

    编辑手记:前面我们介绍常用的子查询优化方法,但总有一些情况时在规律之外.谨慎处理方能不掉坑. 前文回顾: 作者简介:韩锋 精通包括Oracle.MySQL.informix等多种关系型数据库,有丰富的 ...

  5. mysql semi join_技术分享 | MySQL 子查询优化

    作者:胡呈清 爱可生 DBA 团队成员,擅长故障分析.性能优化,个人博客:https://www.jianshu.com/u/a95...,欢迎讨论. 本文来源:原创投稿 *爱可生开源社区出品,原创内 ...

  6. Mysql子查询优化技术

    1:子查询优化的思路 1.1  子查询合并(Subquery Coalescing) 在某些条件下(语义等价:两个查询块产生同样的结果集),多个子查询能够合并成一个子查询(合并后还是子查询,可以通过其 ...

  7. MySQL调优之关联查询、子查询优化

    我们准备如下两个表,并插入数据. #分类 CREATE TABLE IF NOT EXISTS `type` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREME ...

  8. 8、查询优化-关联查询优化-子查询优化-Order by 关键字优化-Group by 关键字优化-双路排序和单路排序

    8.查询优化 8.1.准备数据 8.1.1.建表 CREATE TABLE `dept` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`deptName` VAR ...

  9. mysql自带查询优化_MySQL之select in 子查询优化的实现

    下面的演示基于MySQL5.7.27版本 一.关于MySQL子查询的优化策略介绍: 子查询优化策略 对于不同类型的子查询,优化器会选择不同的策略. 1. 对于 IN.=ANY 子查询,优化器有如下策略 ...

  10. dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》

    [视频:dataguru北京线下沙龙-第二部 <Oracle 索引优化思路--案例分享 -- 刘盛> /微笑]

最新文章

  1. 网页表格隔行显示不同颜色,怎样实现?
  2. 数据库死锁及解决方法
  3. 理解图像的傅里叶变换(细心分析)
  4. android 如何添加第3方lib库到kernel中
  5. Vue的表单组件之下拉框
  6. java静态类和非静态类_关于java:静态和非静态内部类的区别?
  7. jvm jinfo 参数_jinfo:JVM运行时配置的命令行浏览
  8. 使用虚拟环境virtualenv 创建虚拟环境出现PermissionError: [Errno 13] Permission denied:
  9. Laravel定时任务的每秒执行
  10. hive 筛选出数字_后悔没早点学会这几个万能的Excel筛选技巧,这些操作技巧得记牢...
  11. Gallery3d 学习笔记(12)
  12. 没有apihost什么意思_热文:2021年没有立春什么意思
  13. Unity插件 - MeshEditor(五) 网格顶点动画(变形动画)
  14. 解决 Exception: ROM is missing for pong, see https://github.com/openai/atari-py#roms for instructions
  15. CentOS7 分区合并
  16. python自动化交易_python 优矿自动化交易
  17. 干货!!不同程序员岗位对不同电脑性能的要求(编程开发选电脑)
  18. K8s Kubectl基础命令的使用、滚动更新、以及回滚操作
  19. word自带公式等号对齐(可任意符号处对齐)
  20. Bootstrap 响应式开发(2021.10.13)

热门文章

  1. g729源码分析-9-g729-解码
  2. Python 实现导入三份EXCEL表自动生成每周的考核周报WORD文档
  3. 010editor的破解
  4. mac多开屏幕_MAC外接屏幕一键开启HiDPI,支持Mojave
  5. 读书笔记 · AI产品经理的工作流程
  6. 目前比较流行的网站开发框架
  7. ps html切图教程,#PS教程:你所不知道的Photoshop CC快速切图的方法
  8. Ubuntu下Opencv安装与使用
  9. jvm垃圾回收机制查看及说明
  10. pycharm破解版下载(可用)