Oracle 子查询优化思路
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 子查询优化思路相关推荐
- Oracle表查询优化思路
一.分页语句优化思路 正确的分页框架: SELECT *FROM (SELECT *FROM (SELECT A.*, ROWNUM AS RNFROM (需要分页的SQL) A)WHERE ROWN ...
- MySQL子查询优化思路
子查询的优化最重要的优化建议是尽可能使用关联查询来代替. 因为子查询每次查询出来的结果会暂时存放在临时表里,也会进行IO,与其如此还不如直接使用join来进行关联. 当然,也并不是所有的子查询都能使用 ...
- Mysql深度讲解 – 子查询优化
前言 上一篇[Mysql深度讲解 – Join语句]详细说了Join的相关内容,本篇会讲一下子查询如何优化.一般来说在正常的业务情况下大多数sql语句都会有子查询,一个表从另一个表里查询数据,本篇会通 ...
- oracle子查询不减少数据,Oracle性能优化-子查询到特殊问题
编辑手记:前面我们介绍常用的子查询优化方法,但总有一些情况时在规律之外.谨慎处理方能不掉坑. 前文回顾: 作者简介:韩锋 精通包括Oracle.MySQL.informix等多种关系型数据库,有丰富的 ...
- mysql semi join_技术分享 | MySQL 子查询优化
作者:胡呈清 爱可生 DBA 团队成员,擅长故障分析.性能优化,个人博客:https://www.jianshu.com/u/a95...,欢迎讨论. 本文来源:原创投稿 *爱可生开源社区出品,原创内 ...
- Mysql子查询优化技术
1:子查询优化的思路 1.1 子查询合并(Subquery Coalescing) 在某些条件下(语义等价:两个查询块产生同样的结果集),多个子查询能够合并成一个子查询(合并后还是子查询,可以通过其 ...
- MySQL调优之关联查询、子查询优化
我们准备如下两个表,并插入数据. #分类 CREATE TABLE IF NOT EXISTS `type` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREME ...
- 8、查询优化-关联查询优化-子查询优化-Order by 关键字优化-Group by 关键字优化-双路排序和单路排序
8.查询优化 8.1.准备数据 8.1.1.建表 CREATE TABLE `dept` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`deptName` VAR ...
- mysql自带查询优化_MySQL之select in 子查询优化的实现
下面的演示基于MySQL5.7.27版本 一.关于MySQL子查询的优化策略介绍: 子查询优化策略 对于不同类型的子查询,优化器会选择不同的策略. 1. 对于 IN.=ANY 子查询,优化器有如下策略 ...
- dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》
[视频:dataguru北京线下沙龙-第二部 <Oracle 索引优化思路--案例分享 -- 刘盛> /微笑]
最新文章
- 网页表格隔行显示不同颜色,怎样实现?
- 数据库死锁及解决方法
- 理解图像的傅里叶变换(细心分析)
- android 如何添加第3方lib库到kernel中
- Vue的表单组件之下拉框
- java静态类和非静态类_关于java:静态和非静态内部类的区别?
- jvm jinfo 参数_jinfo:JVM运行时配置的命令行浏览
- 使用虚拟环境virtualenv 创建虚拟环境出现PermissionError: [Errno 13] Permission denied:
- Laravel定时任务的每秒执行
- hive 筛选出数字_后悔没早点学会这几个万能的Excel筛选技巧,这些操作技巧得记牢...
- Gallery3d 学习笔记(12)
- 没有apihost什么意思_热文:2021年没有立春什么意思
- Unity插件 - MeshEditor(五) 网格顶点动画(变形动画)
- 解决 Exception: ROM is missing for pong, see https://github.com/openai/atari-py#roms for instructions
- CentOS7 分区合并
- python自动化交易_python 优矿自动化交易
- 干货!!不同程序员岗位对不同电脑性能的要求(编程开发选电脑)
- K8s Kubectl基础命令的使用、滚动更新、以及回滚操作
- word自带公式等号对齐(可任意符号处对齐)
- Bootstrap 响应式开发(2021.10.13)