当前位置: 首页 > 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解决了在多种设备上实现相机功能时所遇…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...