Oracle 11g数据库与某个表的最新一笔记录进行关联

2024-08-23 17:28

本文主要是介绍Oracle 11g数据库与某个表的最新一笔记录进行关联,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:最近在写Power BI的看板,而表中的数据都是上亿条记录的,各个表的关联关系非常复杂。而对于某些表,用户又只要看到最新的数据。

举个例子,比如A关联B表,正常来说看板是这样写的。

select * from a
left join b
on a.xx = b.xx

但是实际上,用户只需要B表中,按某些字段划分的最新记录。

我就写成了这样:

WITH C AS(SELECT B.*,ROW_NUMBER() OVER(PARTITION BY B.XXX,B.XXXXX ORDER BY B.INDATE DESC) AS rnFROM B )
SELECT *
FROM A
LEFT JOIN C
ON A.XX = C.XX AND C.RN = 1;

这个sql语句中用到了row_number()的窗口函数(Oracle内置函数),它根据B表中的XXX和XXXXX字段分组,然后根据B表中的INDATE进行了排序。

with c as 则是将结果集存放到内存中,建一个临时表c存储这些结果数据,然后a表直接跟c关联,c.rn = 1 就是最新的记录。

但是,由于我所在公司的数据量太大,这样跑的效率仍然很低。

于是,我改成了如下写法:

WITH c AS (SELECT b.xx,b.xxxxx,MAX(b.indate) AS indateFROM scstadmin.bGROUP BY b.xx,b.xxxxx
)
select * from a
left join b
on a.xx = b.xx 
and b.indate = (select indate from c where c.xx=b.xx and c.xxxxx= b.xxxxx);

这样写的好处是:

1.通过 WITH 子句 (c) 预先计算出每个 xx 最新的 indate,避免对整个表使用 ROW_NUMBER()。减少数据库对无用信息的计算次数,效率自然提升。

2.在主查询中将 b.indate 与子查询的最大时间进行匹配,从而仅选择最新的记录。

当然,语法优化只能优化一部分效率,最简单且有效的写法是对b表中的XX、XXXXX和indate字段做复合索引:(XX, XXXXX,INDATE DESC)。这可以极大地提高 ROW_NUMBER() 的性能。

一小段小记,希望可以帮到大家。

这篇关于Oracle 11g数据库与某个表的最新一笔记录进行关联的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100026

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red