当前位置: 首页 > news >正文

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&#xff0…...

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二次保护器件

三端保险丝,从其结构上来看,是一种芯片式表贴安装产品,通常包含三个端子。其中,两个端子由合金金属构成的保险丝串联而成,当电路中出现过流或短路故障时,保险丝能够迅速熔断,切断电路&#xff0…...

用户增长 - 私域 - 社群运营自检清单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解决了在多种设备上实现相机功能时所遇…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...