【Oracle专栏】group by 和distinct 效率

news2025/1/14 19:31:13

 Oracle相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


1.背景

查阅资料:

       1)有索引情况下,group by和distinct都能使用索引,效率相同。

       2)无索引情况下,distinct 效率高于group by。distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发filesort,导致sql执行效率低下。

       两者的语法区别在于,distinct 用于返回唯一不同的值,group by 的原理是先对结果进行分组,然后返回每组中的第一条数据,且是根据group by的后接字段进行去重的。

2. 实验

准备表:test_subject_bal  1千万数据

select count(*) from test_subject_bal t

 2.1 无索引情况下       

1)distinct 实验

实验语句:
select distinct t.social_credit_code,t.year_month 
      from  test_subject_bal t
      where t.data_flag='M'  --and t.social_credit_code='014011024205200001'
      and not exists(select 1 from validate_dtl_book b 
                     where b.orgno_fz = t.social_credit_code
                     and b.kid = t.book_id)   
 结果截图: 11.375s   6.31s  7.108s  6.769s  6.660s

sql语句的执行计划: 125316

2)group by 实验

实验语句:
select  t.social_credit_code,t.year_month 
      from  test_subject_bal t
      where t.data_flag='M'  --and t.social_credit_code='014011024205200001'
      and not exists(select 1 from validate_dtl_book b 
                     where b.orgno_fz = t.social_credit_code
                     and b.kid = t.book_id)   
      group by social_credit_code,t.year_month
截图截图:7.458s  6.570s   7.123s   7.041s    6.206s

sql语句的执行计划:  125316

2.2有索引情况下

create table test_subject_bal2 as select * from test_subject_bal t;

CREATE INDEX idx_orgno_test_subject_bal2 ON test_subject_bal2 (social_credit_code);
CREATE INDEX idx_ymonth_test_subject_bal2 ON test_subject_bal2 (year_month);

1)distinct 实验

sql语句:
select distinct t.social_credit_code,t.year_month 
      from  test_subject_bal2 t
      where t.data_flag='M'  --and t.social_credit_code='014011024205200001'
      and not exists(select 1 from validate_dtl_book b 
                     where b.orgno_fz = t.social_credit_code
                     and b.kid = t.book_id)   
结果截图:7.142s  6.911s  6.867s   7.908s   6.636s
sql执行计划:125319

2)group by 实验

sql语句:
select  t.social_credit_code,t.year_month 
      from  test_subject_bal2 t
      where t.data_flag='M'  --and t.social_credit_code='014011024205200001'
      and not exists(select 1 from validate_dtl_book b 
                     where b.orgno_fz = t.social_credit_code
                     and b.kid = t.book_id)   
      group by social_credit_code,t.year_month
结果截图: 6.827s  7.285s  7.415s  6.415s  6.384s

sql执行计划:125319

2.3 有索引情况下,且索引字段是过滤条件的字段

CREATE INDEX idx_data_flag_test_subject_bal2 ON test_subject_bal2 (data_flag);

1)distinct 实验

sql语句:
select distinct t.social_credit_code,t.year_month 
      from  test_subject_bal2 t
      where t.data_flag='M'  --and t.social_credit_code='014011024205200001'
      and not exists(select 1 from validate_dtl_book b 
                     where b.orgno_fz = t.social_credit_code
                     and b.kid = t.book_id)   
结果截图:6.352s  6.729s  6.242s   6.163s   6.126s

sql执行计划:125319

2)group by实验

sql语句:
select  t.social_credit_code,t.year_month 
      from  test_subject_bal2 t
      where t.data_flag='M'  --and t.social_credit_code='014011024205200001'
      and not exists(select 1 from validate_dtl_book b 
                     where b.orgno_fz = t.social_credit_code
                     and b.kid = t.book_id)   
      group by social_credit_code,t.year_month
结果截图:6.304s  6.144s  6.137s   6.144s   6.155s

sql执行计划:125319

3.总结 

实验中:表 1千万级别

序号

实验内容

第1次

第2次

第3次

第4次

第5次

sql执行计划

cost 有条件

sql执行计划

cost 无条件

1

distinct实验

无索引

11.375s

6.31s

7.108s

6.769s

6.660s

125316

120964

2

group实验

无索引

7.458s

6.570s

7.123s

7.041s

6.206s

125316

120964

3

distinct实验

有索引

7.142s

6.911s

6.867s

7.908s

6.636s

125319

120967

4

group实验

有索引

6.827s

7.285s

7.415s

6.415s

6.384s

125319

120967
5

distinct实验

条件索引

6.352s

6.729s

6.242s

6.163s

6.126s

125319

120967
6

group实验

条件索引

6.304s

6.144s

6.137s

6.144s

6.155s

125319

120967

 分析结果:

           加索引在非检索字段,即时有索引 效果也不大,甚至有可能消耗更多资源。

           加索引在检索字段,效果有,但是如果表的数据量很大,全表扫描可能仍然比使用索引快。看到执行计划,依然是全表扫描。

常用优化建议:

  • 索引优化‌:确保在查询条件中频繁使用的列上创建适当的索引。
  • 统计信息更新‌:定期更新表和索引的统计信息,以确保优化器能够做出正确的决策。
  • 避免全表扫描‌:尽量通过索引访问表,以减少I/O开销。
  • 查询重写‌:有时通过重写查询语句,可以获得更有效的执行计划。
  • 使用提示(Hints)‌:在特定情况下,可以使用Oracle提供的提示来影响优化器的决策,但应谨慎使用。

项目管理--相关知识   

项目管理-项目绩效域1/2-CSDN博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

高项-案例分析万能答案(作业分享)-CSDN博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

项目管理-配置管理与变更-CSDN博客

项目管理-项目管理科学基础-CSDN博客

项目管理-高级项目管理-CSDN博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:“Oracle字符型,长度50”但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

Oracle 更换监听端口-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包,文本处理sed,awk

关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less,grep 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 文本处理 awk 创建文件 格式: touch 文件名 删除文件 复制文…

day01-HTML-CSS——基础标签样式表格标签表单标签

目录 此篇为简写笔记下端1-3为之前笔记(强迫症、保证文章连续性)完整版笔记代码模仿新浪新闻首页完成审核不通过发不出去HTMLCSS1 HTML1.1 介绍1.1.1 WebStrom中基本配置 1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签1.3.4 换行标…

哥大开发AI模型助力癌症和遗传病研究,近屿智能专注培养AI人才

近日,哥伦比亚大学瓦格洛斯医学院的研究团队在《自然》杂志上发表了一项重大研究成果。他们开发出一种名为“通用表达转换器”(GET)的新型AI模型,能够准确预测任何人类细胞中的基因活性,从而揭示细胞的内部工作机制。 …

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客,作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为: 2.vs…

基于spingbott+html+Thymeleaf的24小时智能服务器监控平台设计与实现

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…

MySQL社区版下载及其环境配置(msi)

MySQL官网:https://www.mysql.com/ 1、进入官网 点击Downloads 找到MySQL Community (GPL) Downloads   然后点击MySQL Installer for Windows(MySQL Community Server非向导式安装,而MySQL Installer for Windows有向导式安装&#x…

Linux-----进程通讯(消息队列)

目录 相关API 1.相关数据类型 mqd_t struct mq_attr struct timespec 2.相关系统调用接口 mq_open() mq_timedsend() && mq_send() mq_timedreceive() && mq_receive() mq_unlink() clock_gettime() 父子进程使用消息队列通讯 平行进程使用消息队列…

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…

mac homebrew配置使用

本文介绍mac上homebrew工具的安装、配置过程。homebrew功能类似于centos的yum,用于软件包的管理,使用上有命令的差异。 本次配置过程使用mac,看官方文档,在linux上也可以用,但我没试过,有兴趣的同学可以试试…

《使用 YOLOV8 和 KerasCV 进行高效目标检测》

《使用 YOLOV8 和 KerasCV 进行高效目标检测》 作者:Gitesh Chawda创建日期:2023/06/26最后修改时间:2023/06/26描述:使用 KerasCV 训练自定义 YOLOV8 对象检测模型。 (i) 此示例使用 Keras 2 在 Colab 中…

【Uniapp-Vue3】onShow和onHide钩子的对比和执行顺序

页面生命周期函数的执行顺序是onLoad>onShow>onReady,其中只有onReady中才能获取到DOM节点。 一、onShow函数 每一次的页面切入都会触发onShow函数。 import {onShow} from "dcloudio/uni-app"; onShow(()>{...}) 如果我点击“跳转页面1”再返…

GPT 系列论文精读:从 GPT-1 到 GPT-4

学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT,GPT-2,GPT-3 论文精读【论文精读】…

(STM32笔记)十二、DMA的基础知识与用法 第二部分

我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…

2024年11月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(一)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、系统架构设计案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午综合知识科目的选择题,同时附带参考答案、解析和所涉知识点。 由于机…

AI浪潮下的IT变革之路:机遇、挑战与重塑未来

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 AI浪…

【RTSP】使用webrtc播放rtsp视频流

一、简介 rtsp流一般是监控、摄像机的实时视频流,现在的主流浏览器是不支持播放rtsp流文件的,所以需要借助其他方案来播放实时视频,下面介绍下我采用的webrtc方案,实测可行。 二、webrtc-streamer是什么? webrtc-streamer是一个使用简单机制通过 WebRTC 流式传输视频捕获…

【芯片设计- RTL 数字逻辑设计入门 9.2 -- flip flop 与 寄存器的关系详细介绍】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 Overview硬件角度的 Flip-Flop软件角度的寄存器举例说明硬件设计角度软件开发角度D Flip-Flop 实现基本原理:Verilog 代码:UT 示例JK Flip-Flop 实现基…

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介:基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…

深度学习中的卷积和反卷积(三)——卷积和反卷积的计算

1 Stride和Padding的介绍 计算卷积和反卷积绕不开stride和padding的讨论。卷积和反卷积里都有stride和padding参数,但是同一个参数在卷积和反卷积里的作用不一样,非常容易使人困惑,本文试图理清他们的关系,并用实际数值例子演示计…

网页美观进阶:每一种渐变的实现方式

CSS 渐变效果详解:每一种渐变的实现方式 在现代网页设计中,CSS 渐变效果为我们提供了一种丰富的视觉表现手段,可以使简单的背景或元素具有动态和立体感。渐变从单一颜色转变为另一种颜色,为网站增添了活力与美感。在这篇博文中&a…