sql相关

1.        SQL基本调整
1.1.        SQL处理顺序
SQL语句处理分两个或三个阶段,每个语句从用户进程传给服务器进程进行分析然后执行。如果是select 语句,则还需要将结果返回给用户。
1.1.1.        分析(PARSE)
分析是SQL语句处理的第一步。主要进行:
        检查语法和根据字典来检查表名、列名。
        确定用户执行语句的权限。
        为语句确定最优的执行计划。
        从SQL区中找出语句。
1.1.2.        执行(Execute)
Oracle执行阶段执行的是被分析过的 语句。对于UPDATE、DELETE语句,Oracle先锁住有关的行。Oracle还要查找数据是否在数据缓冲区里。如果不在还得从数据文件中将数据读到数据缓冲区里来。
1.1.3.        检索(Fetch )
如果是select 语句,还要进行检索操作。执行结束,将数据返回给用户。
1.1.4.        Select 语句处理
一般select 语句处理要经过下面步骤:
执行顺序是:
1)        建立光标。
2)        分析语句。
3)        定义输出:指定位置,类型,结果集的数据类型。
4)        绑定变量:如果查询使用变量的话,Oracle就要知道变量的值。
5)        是否能并行运行。
6)        执行查询。
7)        检索出数据。
8)        关闭光标。
1.1.5.        DML语句处理
一般INSERT,UPADTE,DELETE 语句处理执行顺序是:
1)        建立光标:Oracle建立一个隐含的光标。
2)        分析语句。
3)        绑定变量:如果语句用了变量,Oracle要知道变量的值。
4)        看语句是否能以并行方式运行(如果有多个服务器时)。
5)        执行语句。
6)        通知用户,语句已执行完毕。
7)        关闭光标。
1.1.6.        COMMIT语句处理顺序
当事务提交时,Oracle分配一个唯一的顺序号SCN(System Change Number)给事务。数据库恢复总是基于该SCN号来进行处理。SCN号是记录在控制文件、数据文件、块头及重做日志文件中。
1.COMMIT处理步骤:
Oracle 在下面情况提交事务:
        发出一个COMMIT语句。
        执行DDL语句时。
        离开Oracle时。
2.Oracle处理COMMIT的顺序:
1)        服务器为每个COMMIT产生一个SCN。使改变永久化。
2)        LGWR进程将日志缓冲区数据并带有SCN一起写到重做日志文件。
3)        服务器释放表级和行级锁。
4)        用户被提示COMMIT完成。
5)        服务器使事务已完成。
1.1.7.        处理ROLLBACK的顺序
当下面情况发生时执行回滚:
        发出ROLLBACK命令。
        服务器进程放弃地终止。
        会话被DBA终止。
ROLLBACK 是对数据库的操作进行撤消,步骤有:
1)        服务器进程不做任何的改变。
2)服务器释放表级和行级锁。
3) 服务器使事务已完成。

1.2.        SQL语句优化
1.2.1.        SQL语句的优化方法
在提高SQL语句效率上,可以考虑下面几个方面:
        重新构造语句;
        修改或禁止触发器;
        重新构造数据;
        及时统计CBO所用信息。
1.2.2.        重新构造语句
在重构索引之后,你可以试着重构语句。即重写那些效率差的语句。如果你对语句的意图了解的话,就很容易对语句进行修改。
重新构造语句
由于SQL语言的灵活性,应用中多个语句更适合应用的需要。虽然两个SQL语句可以产生同样的结果,但Oracle处理一个语句比处理多个组合而成的语句更快。你可以使用EXPLAIN PLAN语句的结果进行比较,从而确定哪个语句更有效。
举例说明:
选择有利的连接顺序
连接顺序对执行很有意义。SQL语句调整的主要目标是避免执行不必要的工作,这样就考虑三个规则:
        如果通过索引可以得到行的话,就要避免全表扫描;
        如果你能使用的索引取到100行的话,就避免使用取到 10,000 行的索引;
        选择连接要注意选择连接较少行的表。
下面的例子说明连接顺序的效率:
1). 选择驱动表和驱动索引。
前三个条件是对单个表进行筛选,后两个条件是连接条件。筛选条件主要是表和索引的选择。
2).选择正确的索引
当了解所要驱动的表后,就要选择有效的索引。否则就可能出现全表扫描。
3).选择最好的连接顺序
使用非转换列值
可以在where 子句中使用非转换的列值,如:WHERE a.order_no = b.order_no
这样的使用比下面的用法更好:
WHERE TO_NUMBER (SUBSTR(a.order_no, instr(b.order_no, ’.’) - 1))
= TO_NUMBER (SUBSTR(a.order_no, instr(b.order_no, ’.’) - 1))
建议不要在where 后使用SQL 函数。
1.2.3.        条件中尽量少用函数
条件中尽量避免对表字段进行函数操作,除非该字段有对应的函数索引,对于带有substr字段的条件尽量使用有前导字符的like运算符代替.这是因为有前导符的like(如’8834%’)可以使用索引,而substr将使对应字段的索引无效,导致数据库对该表进行全表扫描.
如: select distinct a.taxregcode,
                a.taxpayername,
                a.regaddress,
                a.jurpname,
                d.taxpayerstatusname
  from v_reg_taxpayerbasicinfo a,
       tb_lvy_levydata         b,
       tb_lvy_levydetaildata   c,
       TC_Reg_TaxpayerStatus   d
       where a.taxregcode = b.taxregcode
       and b.levydataid = c.levydataid
       and b.negativeflag <> :"SYS_B_0"
       and a.businesstradecode like :"SYS_B_1"
       and c.taxtypecode like :"SYS_B_2"
       and to_char(b.taxstatusdate, :"SYS_B_3") between :"SYS_B_4" and :"SYS_B_5"
       and a.taxpayerstatuscode = d.taxpayerstatuscode
该语句由于对日期字段使用了函数进行转换,导致对表tb_lvy_levydata进行全表扫描.极大影响执行效率,故可以对该字段修改为:
and b.taxstatusdate between :"SYS_B_4" and :"SYS_B_5"
从而是执行计划可以走索引,避免进行全表扫描从而提高速度,减轻对数据库压力
1.2.4.        使用绑带变量提高效率
由于SQL执行的过程中首先要进行分析,如果数据库的缓存中存在对应的SQL语句就会直接提取该语句进行执行操作,避免分析过程从而提高语句执行的效率,同时也减少数据库的缓存空间.故尽量使用绑带变量方式对SQL进行操作.
1.2.5.        SELECT语句中避免使用*
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.
1.2.6.        (NOT) IN
对于条件中带有IN、NOT IN的子句如果条件语句中查询出来的结果集比较大的话,尽量使用EXISTS 或者NOT EXISTS语句代替。
对于NOT IN,在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下在数据量比较多的情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历).  为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.。
1.2.7.        使用索引提高查询效率
对于经常大量执行的SQL语句,可以根据查询条件建立相应的索引或者组合索引从而提高查询速度,同时也大量减少物理读和逻辑读而提高数据库的性能。

后注racle9i及以后版本趋向对SQL语句进行Cost Based Optimizer(简称CBO) 基于统计信息的优化.故及时收集表的信息对于SQL执行是非常有好处的.上面的文档说明有些是RBO的规则下.
当然最重要的是数据库的设计!数据库的设计好坏将决定一个数据库性能的60%甚至更多!

执行高效sql的最佳方法 执行高效sql的最佳方法执行高效sql的最佳方法执行高效sql的最佳方法执行高效sql的最佳方法 立即下载

相关推荐

字节跳动程序媛教你如何刷算法题:面试手撕代码我就没怕过

本人上一次刷题还是大一的C语言期末考试……但是面试中算法考核截止上岸前一直保持着100%正确率的光辉记录。 本文将给你指明一条刷题的决胜指南。并从算法的重要性、题库的选择以及刷题的三大步骤分别进行讲解,彻底解决你所有关于面试算法所有的困扰。

Stay Hungry Stay Foolish 求知若饥 虚心若愚 2万+

SQL分类和命名规范

文章目录1. SQL 分类2. SQL语言的规则与规范3. 注 释4. 命名规则 1. SQL 分类 SQL语言在功能上主要分为如下3大类: DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。 主要的语句关键字包括 CREATE 、 DROP 、 ALTER 等。 DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记

兮动人 3702

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 210

oracle优化器学习

Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的(说白了,就是开销最小的)。一般大家用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose

wolf 807

GhidrAssist:AI驱动的逆向工程助手实战指南

逆向工程是分析软件内部工作原理、理解二进制代码逻辑的关键技术,广泛应用于软件安全、恶意代码分析和漏洞挖掘等领域。其核心原理在于通过反编译、控制流与数据流分析等手段,将机器码还原为可理解的高级语言表示。传统逆向分析高度依赖人工经验,面对海量代码时效率低下且易出错。随着大语言模型(LLM)技术的发展,其强大的代码理解与推理能力为自动化逆向分析提供了新的可能。通过将LLM与成熟的逆向工程框架(如Ghidra)相结合,可以构建智能辅助系统,实现代码意图的自动解释、变量/函数的智能重命名以及潜在漏洞模式的辅助识别,从

weixin_42547335的博客 596

从零到一:Zephyr RTOS 在 STM32F4 上的移植与实战(含设备树配置详解)

本文详细介绍了如何从零开始将Zephyr RTOS移植到STM32F4开发板,涵盖开发环境搭建、硬件抽象层分析、设备树配置及系统裁剪等关键步骤。通过实战案例,帮助开发者掌握Zephyr RTOS在嵌入式设备中的应用,提升物联网边缘计算设备的开发效率。

weixin_26976635的博客 589

SQL优化原则

一、数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的。 在一个系统分析、设计阶段,因为数据量较小,负荷较低。我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程。 所以在考虑整个系统的流...

qq_41893413的博客 501

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 266

高效SQL执行的基本概念及基本原则

. SQL基本调整1.1. SQL处理顺序SQL语句处理分两个或三个阶段,每个语句从用户进程传给服务器进程进行分析然后执行。如果是select 语句,则还需要将结果返回给用户。1.1.1. 分析(PARSE)分析是SQL语句处理...

cobg41938900的博客 191

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

全网最详细的YOLOv5项目源码解读之训练部分train. py。全文近5万字!代码逐行注释,逐段讲解,小白入门必备!

路人贾的博客 3万+

AI: 机器学习的模型是如何训练的?(在试错中学习)

一句话理解机器学习一般训练过程 :通过有标签样本来调整(学习)并确定所有权重Weights和偏差Bias的理想值。 训练的目标:最小化损失函数 (损失函数下面马上会介绍) 机器学习算法在训练过程中,做的就是:检查多个样本并尝试找出可最大限度地减少损失的模型;目标就是将损失(Loss)最小化 在这里插入图片描述 上图就是一般模型训练的一般过程(试错过程),其中 模型: 将一个或多个特征作为输入,然后返回一个预测 (y’) 作为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型,如下公式

HowieXue 薛永浩的博客 3万+

sql相关子查询

这个dept_no传到子查询中去,那么子查询在联表的时候,就只会联是这个部门号的数据行,所以子查询的联表得到的暂时表只是当前这一个部门的数据,没有其他部门的数据;这个例题的最终需要获取的信息如果只是dept_no和maxSalary,那很简单了,只需要将两个表连起来,然后对部门进行分组,计算max(salary)就可以了,但是现在除了这两个字段之外还要求emp_no字段,这个字段不是分组字段,所以直接查询是不正确的,所以使用group by的方式是不成立的,就需要使用相关子查询。1.什么是相关子查询。

weixin_45771607的博客 2145

基于 Simulink 的三相四线制整流器在三相不平衡负载下的中点电位平衡控制实战教程

本文为三相四线制整流器在中点电位不平衡时的Simulink仿真教程。首先分析中点电位漂移的电荷不平衡机理,提出零序电压注入控制策略。详细演示建模步骤:搭建三相四线制主电路,构建中点平衡控制算法(含MATLAB函数代码),实现控制信号叠加与PWM生成。通过对比仿真验证控制效果,并给出零序电压限幅、中性线电感影响等工程建议。该方案能有效抑制三相不平衡负载下的中点电位波动,保证系统稳定运行。

xiaoheshang_123的博客 50

什么是SQL 语句中相关子查询与非相关子查询

要理解相关子查询和非相关子查询,我们得首先理解什么是子查询,子查询是指在一个查询语句中嵌套的另一个查询语句。

鲁边的博客 673

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SQL相关子查询与非相关子查询

目录 SQL子查询可以分为相关子查询和非相关子查询两类。 非相关子查询的执行不依赖与外部的查询。 1.返回单值: 查询所有价格高于平均价格的图书名,作者,出版社和价格。 2.返回值列表:查询所有借阅图书的读者信息 相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。 查询Book表中大于该类图书价格平均值的图书信息SElECT 图书名,出版社,类编号,价格 总结 SQL子查询可以分为相关子查询和非相关子查询两类。 假设Books表如下: 类编号 图书名

W_H_M_2018的博客 798

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SQL小白笔记 SQL相关子查询与非相关子查询

SQL子查询可以分为相关子查询和非相关子查询两类 表格数据如下 score 表 student 表 非相关子查询不依赖于外部查询条件 执行过程: (1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。 (2)执行外部查询,并显示整个结果。   非相关子查询一般可以分为:返回单值的子查询和返回一个列表的子查询, ...

weixin_45634884的博客 418

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SQL相关子查询

相关子查询:先执行主查询,再针对主查询返回的每一行数据执行子查询,

bcbobo21cn的专栏 545

SQL的相关子查询和非相关子查询

SQL的相关子查询和非相关子查询 SQL的相关子查询和非相关子查询1相关子查询&非相关子查询概念2 举例说明3 参考 1相关子查询&非相关子查询概念 子查询:嵌套在其它查询中的查询语句。(又称为内部查询) 主查询:包含其它子查询的查询称为主查询。(又称外部查询) 子查询分为两类: 相关子查询 非相关子查询 在主查询中,每查询一条记录,需要重新做一次子查询,这种称为相关子查询。 在主查询中,子查询只需要执行一次,子查询结果不再变化,供主查询使用,这种查询方式称为非相关子查询。 2 举例说明

Accelerating的博客 1810

【SQL】(不)相关子查询

文章目录1. 不相关子查询特点示例2. 相关子查询特点执行规则示例 (不)相关查询在嵌套查询中应用,嵌套查询最能体现SQL结构化查询的特点 本篇内容,先看示例,食用更佳 1. 不相关子查询 特点 由子向父执行(子 -> 父),且父查询和子查询可以轻松分开单独处理 示例 题目 查询与’韩梅梅’同专业的学生信息 分析 子查询:得到’韩梅梅’的专业名 父查询:利用子查询的结果,查询同专业的学...

K。的博客 7200

SQL子查询总结:相关子查询与非相关子查询有什么区别

如果一个select语句能够返回单个值或者一列值,且该select语句嵌套在另一个SQL语句(例如select语句、insert语句、update语句或者delete语句)中,那么该select语句成为“子查询”(也叫内层查询),包含子查询的SQL语句称为“主查询”(也叫外层查询)。为了标记子查询与主查询之间的关系,通常将子查询写在小括号内。子查询一般用在主查询的where子句或having子句中...

zhilo1231的博客 3870

SQL入门:相关子查询

  允许引用先前提到的任何表的子查询称为相关子查询。我们也说该子查询具有对主查询中表的相关引用。     下列示例是一个不相关子查询,该子查询列出部门 A00 中薪水超过该部门平均薪水的雇员的雇员编号和姓名:         SELECT EMPNO, LASTNAME    FROM EMPLOYEE    WHERE WORKDEPT = A00     AND SALARY > (S

我的生活,我的BLOG 1243

SQL相关子查询与非相关子查询入门版

本文转载自:https://blog.youkuaiyun.com/shiyong1949/article/details/80923083 SQL子查询可以分为相关子查询和非相关子查询两类。 假设Books表如下:  类编号 图书名 出版社 价格 2 c#高级应用 圣通出版 23.00 2 Jsp开发应用 机械出版社 45.00  3 ...

杨小白的博客 395

SQL中相关查询与不相关查询的区别

本文需要介绍数据库当中的相关查询与不相关查询。在SQL中,相关查询与不相关查询是指在查询语句中使用的表之间是否存在关联关系。具体来说,相关查询是指在查询语句中使用的多个表之间存在关联条件,而不相关查询则是指在查询语句中使用的多个表之间不存在关联条件。

张小鱼的博客 752
上一篇: sql执行顺序
下一篇: BCP
wfdoublext
博客等级 码龄19年 5粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值