Oracle执行一条SQL的内部过程
一、SQL语句根据其功能主要可以分为以下几大类:
1. 数据查询语言(DQL, Data Query Language)
- 功能:用于从数据库中检索数据,常用于查询表中的记录。
- 基本结构:主要由SELECT子句、FROM子句、WHERE子句等组成。
- 关键字:SELECT。
- 示例:SELECT 字段名 FROM 表名 WHERE 条件;
2. 数据操纵语言(DML, Data Manipulation Language)
- 功能:用于对数据库表中的数据进行增删改操作。
- 主要形式:
- 插入(INSERT):向表中添加新的记录。
- 更新(UPDATE):修改表中的已有记录。
- 删除(DELETE):从表中删除记录。
- 关键字:INSERT、UPDATE、DELETE。
- 示例:
- 插入:INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
- 更新:UPDATE 表名 SET 字段名 = 新值 WHERE 条件;
- 删除:DELETE FROM 表名 WHERE 条件;
二、Oracle执行一条SQL的内部过程
Oracle数据库执行一条SQL语句的内部过程是一个复杂而精细的操作,它涉及多个组件和步骤的协同工作。虽然具体实现细节可能会随着Oracle数据库版本的不同而有所变化,但下面是一个简化和通用的过程描述,涵盖了从SQL语句提交到结果返回的主要步骤:
1. SQL语句提交
- 用户接口:用户通过SQL*Plus、SQL Developer、PL/SQL Developer或其他数据库工具提交SQL语句。
- 网络传输(如果适用):对于远程数据库,SQL语句通过网络协议(如TCP/IP)发送到数据库服务器。
2. 解析
- 语法检查:Oracle首先检查SQL语句的语法是否正确。
- 语义检查:然后,它检查SQL语句中引用的表、列、数据类型等是否存在于数据库中,以及用户是否有足够的权限访问它们。
- 共享池查询:Oracle会检查共享池(Shared Pool)中的库缓存(Library Cache),看是否已经存在相同或相似的SQL语句的执行计划。如果存在,它可能会重用已有的执行计划,这个过程称为SQL语句的软解析。如果不存在,则需要进行硬解析。

官方的Oracle体系结构图,可见实例是系统分配给Oracle的内存和一堆进程的结合体,这里主要回顾执行sql语句会涉及到的几个部分: - SGA中的shared pool、database buffer cache、redo log buffer,
- PGA中的Hash Area、Private SQL Area
- 进程中的DBWn、LGWR、CKPT

shared pool区域如上图,包括 Library Cache、Data Dictionary Cache 和 Server Result Cache
- Library Cache 主要用于储存可执行的SQL和PL/SQL代码
- Data Dictionary Cache 主要用于缓存数据字典的相关数据,该缓存区域对所有服务进程共享
- Server Result Cache 主要用于保存SQL和PL/SQL执行产生的结果集
3. 硬解析
如果SQL语句需要硬解析,Oracle会执行以下步骤:
- 生成执行计划:Oracle优化器根据统计信息、索引、表的物理结构等因素,生成SQL语句的一个或多个可能的执行计划。
- 选择最佳执行计划:优化器会评估每个执行计划的成本,并选择成本最低的执行计划。
- 将执行计划存储在共享池中:选择的执行计划会被存储在共享池中的库缓存中,以便将来可以重用。
4. 执行
- 数据访问:根据执行计划,Oracle会访问数据库中的表、索引等对象,获取需要的数据。
- 排序和聚合:如果SQL语句中包含ORDER BY、GROUP BY等子句,Oracle会对数据进行排序和聚合操作。
- 连接:如果SQL语句涉及多个表的连接操作,Oracle会按照执行计划中的指示执行连接操作。
5. 返回结果
- 结果集构建:将查询结果构建成一个结果集。
- 返回给客户端:将结果集通过网络(如果适用)返回给发起查询的客户端。
6. 后处理
- 日志记录:Oracle会记录与查询相关的日志信息,如Redo日志、Undo日志等。
- 资源清理:释放查询执行过程中使用的资源,如内存和临时空间。
需要注意的是,这个过程是高度优化的,Oracle数据库在设计和实现时考虑到了各种优化技术,以最小化查询时间、最大化系统吞吐量并优化资源使用。此外,随着Oracle数据库版本的更新,内部实现和性能优化可能会有所不同。
相关文章:
Oracle执行一条SQL的内部过程
一、SQL语句根据其功能主要可以分为以下几大类: 1. 数据查询语言(DQL, Data Query Language) 功能:用于从数据库中检索数据,常用于查询表中的记录。基本结构:主要由SELECT子句、FROM子句、WHERE子句等组成…...
SpringMVC的架构有什么优势?——控制器(一)
#SpringMVC的架构有什么优势?——控制器(一) 前言 关键字: 机器学习 人工智能 AI chatGPT 学习 实现 使用 搭建 深度 python 事件 远程 docker mysql安全 技术 部署 技术 自动化 代码 文章目录 控制器(Controller) 控制器是S…...
LabVIEW干涉仪测向系统
开发了一套基于LabVIEW的软件系统,结合硬件设备,构建一个干涉仪测向实验教学平台。该平台应用于信号处理课程,帮助学生将理论知识与实际应用相结合,深化对信号处理核心概念的理解和应用。 项目背景: 当前信号处理教学…...
JavaScript 模拟光标全选选中一段文字
在JavaScript中,如果你想要通过编程方式选择一段文本,你可以使用window.getSelection()和Range对象。以下是一个简单的例子,展示了如何使用这些对象来选中页面上的特定文本节点: function selectText(node) {if (window.getSelect…...
【算法】代码随想录之数组(更新中)
文章目录 前言 一、二分查找法(LeetCode--704) 二、移除元素(LeetCode--27) 前言 跟随代码随想录,学习数组相关的算法题目,记录学习过程中的tips。 一、二分查找法(LeetCode--704࿰…...
Win-ARM联盟的端侧AI技术分析
Win-ARM联盟,端侧AI大幕将起 微软震撼发布全球首款AI定制Windows PC——Copilot PC,搭载全新NPU与重塑的Windows 11系统,纳德拉盛赞其为史上最快、最强、最智能的Windows PC。该设备算力需求高达40TOPS,支持语音翻译、实时绘画、文…...
MySQL常见的几种索引类型及对应的应用场景
MySQL 提供了多种索引类型,每种索引类型都有其特定的应用场景和优势。以下是 MySQL 中常见的几种索引类型及其具体应用场景: 1. B-Tree 索引 特点: B-Tree(Balanced Tree,平衡树)是 MySQL 的默认索引类型…...
如何利用java依赖jave-all-deps实现视频格式转换
视频格式转换是常见的需求,通过使用Java依赖库jave-all-deps可以实现视频格式的转换。本文将详细介绍在Java中如何利用jave-all-deps实现视频格式转换。 什么是jave-all-deps库? jave-all-deps是一款基于FFmpeg库的Java音视频编解码库。它提供了一系列AP…...
三端保险丝-锂电池BMS二次保护器件
三端保险丝,从其结构上来看,是一种芯片式表贴安装产品,通常包含三个端子。其中,两个端子由合金金属构成的保险丝串联而成,当电路中出现过流或短路故障时,保险丝能够迅速熔断,切断电路࿰…...
用户增长 - 私域 - 社群运营自检清单SOP(社群运营30问)
Check List: 1.你的目标用户是谁? 2.你的目标用户有哪些需要立马解决的需求?有哪些长期需求?这些需求的优先级是什么? 3.做社群的目的是什么? 4.你的用户和业务是否适合做社群? 5.你做哪类社群才能更好的帮…...
算法·高精度
高精度算法 分为四则运算加减乘除 适用条件 都高精度了,肯定时long long都会爆的情况——一般与阶乘有关 注意事项 用数组模拟位运算,最后在一起考虑进位 注意res[i1]res[i]/10; 是""不是 两数相加,相乘数组的新长度会变&…...
Docker搭建kafka+zookeeper以及Springboot集成kafka快速入门
参考文章 【Docker安装部署KafkaZookeeper详细教程】_linux arm docker安装kafka-CSDN博客 Docker搭建kafkazookeeper 打开我们的docker的镜像源配置 vim /etc/docker/daemon.json 配置 { "registry-mirrors": ["https://widlhm9p.mirror.aliyuncs.com"…...
【cocos2dx】【iOS工程】如何保存用户在游戏内的绘画数据,并将数据以图像形式展示在预览界面
【cocos2dx】【iOS工程】如何保存用户在应用内的操作数据,并将数据以图像形式展示在预览界面 设备/引擎:Mac(11.6)/Mac Mini 开发工具:Xcode(15.0.1) 开发需求:如何保存用户在应用…...
拥抱应用创新,拒绝无谓的模型竞争
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【源码+文档+调试讲解】旅游资源网站
摘 要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述旅游资源网站的当前背景以及系统开发的目的&…...
Monaco 多行提示的实现方式
AI 代码助手最近太火爆,国内有模型厂商都有代码助手,代码助手是个比较典型的 AI 应用,主要看前端,后端的模型都差不多,国内外都有专门的代码模型。现在都是集中在 VSCode 和 Idea的插件,本文通过 Monaco 实…...
SpringMVC的架构有什么优势?——表单和数据校验(四)
#SpringMVC的架构有什么优势?——表单和数据校验(四) 前言 关键字: 机器学习 人工智能 AI chatGPT 学习 实现 使用 搭建 深度 python 事件 远程 docker mysql安全 技术 部署 技术 自动化 代码 文章目录 - - - - - 表单数据…...
Linux实战记录
踩坑实录: day2: 最坑:安装UB居然不知道创建文件夹。 1.虚拟机上不了网:多重置几次 网卡 2.Winscp链接主机: 用户名 就是 linux terminal中的 第一个用户名!...
时间、查找、打包、行过滤与指令的运行——linux指令学习(二)
前言:本节内容标题虽然为指令,但是并不只是讲指令, 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法, 很抱歉, 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的,…...
android CameraX构建相机拍照
Android CameraX 是一个 Jetpack 支持库,旨在简化相机应用的开发工作。它提供了一致且易用的API接口,适用于大多数Android设备,并可向后兼容至Android 5.0(API级别21)。 CameraX解决了在多种设备上实现相机功能时所遇…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
P10909 [蓝桥杯 2024 国 B] 立定跳远
# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时࿰…...
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中,未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS,可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...
.Net Framework 4/C# 面向对象编程进阶
一、继承 (一)使用继承 子类可以继承父类原有的属性和方法,也可以增加原来父类不具备的属性和方法,或者直接重写父类中的某些方法。 C# 中使用“:”来表示两个类的继承。子类不能访问父类的私有成员,但是可以访问其公有成员,即只要使用 public 声明类成员,就既可以让一…...
Nginx 事件驱动理解
在做埋点采集服务的过程中,主要依靠openresty加lua脚本来实现采集。高并发还是主要依靠nginx来实现。而其核心就是事件驱动/多路io复用(epoll机制),不同的linux服务器都有对应的实现方式。 而epoll机制就是,应用启动的…...
