SQL语句的执行过程

合集下载

Oraclesql语句执行顺序

Oraclesql语句执行顺序

Oraclesql语句执⾏顺序sql语法的分析是从右到左⼀、sql语句的执⾏步骤:1)词法分析,词法分析阶段是编译过程的第⼀个阶段。

这个阶段的任务是从左到右⼀个字符⼀个字符地读⼊源程序,即对构成源程序的字符流进⾏扫描然后根据构词规则识别单词(也称单词符号或符号)。

词法分析程序实现这个任务。

词法分析程序可以使⽤lex等⼯具⾃动⽣成。

2)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。

3)语义分析,检查语句中涉及的所有数据库对象是否存在,且⽤户有相应的权限。

4)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句。

5)表达式转换,将复杂的 SQL 表达式转换为较简单的等效连接表达式。

6)选择优化器,不同的优化器⼀般产⽣不同的“执⾏计划”7)选择连接⽅式, ORACLE 有三种连接⽅式,对多表连接 ORACLE 可选择适当的连接⽅式。

8)选择连接顺序,对多表连接 ORACLE 选择哪⼀对表先连接,选择这两表中哪个表做为源数据表。

9)选择数据的搜索路径,根据以上条件选择合适的数据搜索路径,如是选⽤全表搜索还是利⽤索引或是其他的⽅式。

10)运⾏“执⾏计划”⼆、oracle 共享原理:ORACLE将执⾏过的SQL语句存放在内存的共享池(shared buffer pool)中,可以被所有的数据库⽤户共享。

当你执⾏⼀个SQL语句(有时被称为⼀个游标)时,如果它和之前的执⾏过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执⾏路径.。

这个功能⼤⼤地提⾼了SQL的执⾏性能并节省了内存的使⽤。

三、oracle 语句提⾼查询效率的⽅法:1:where column in(select * from ... where ...);2:... where exists (select 'X' from ...where ...);第⼆种格式要远⽐第⼀种格式的效率⾼。

在Oracle中可以⼏乎将所有的IN操作符⼦查询改写为使⽤EXISTS的⼦查询。

sql 语句的执行顺序

sql 语句的执行顺序

sql 语句的执行顺序SQL语句的执行顺序是指在执行一个SQL查询时,各个子句的执行顺序。

下面将按照常见的SQL查询语句的执行顺序,列举出10个例子。

1. SELECT语句的执行顺序:- FROM子句:确定要查询的数据来源表或视图。

- WHERE子句:对数据进行筛选,仅选择符合条件的记录。

- GROUP BY子句:按指定的列对数据进行分组。

- HAVING子句:对分组后的数据进行筛选,仅选择符合条件的分组。

- SELECT子句:选择要查询的列。

- ORDER BY子句:对查询结果进行排序。

- LIMIT子句:限制查询结果的数量。

2. INSERT语句的执行顺序:- INSERT INTO子句:指定要插入数据的表。

- VALUES子句:指定要插入的数据。

3. UPDATE语句的执行顺序:- UPDATE子句:指定要更新数据的表。

- SET子句:指定要更新的列和值。

- WHERE子句:对要更新的数据进行筛选。

4. DELETE语句的执行顺序:- DELETE FROM子句:指定要删除数据的表。

- WHERE子句:对要删除的数据进行筛选。

5. CREATE TABLE语句的执行顺序:- CREATE TABLE子句:指定要创建的表的名称和列的定义。

- CONSTRAINT子句:指定表的约束条件,如主键、唯一性约束等。

6. ALTER TABLE语句的执行顺序:- ALTER TABLE子句:指定要修改的表的名称。

- ADD COLUMN子句:添加新的列。

- DROP COLUMN子句:删除列。

- ALTER COLUMN子句:修改列的定义。

7. CREATE INDEX语句的执行顺序:- CREATE INDEX子句:指定要创建索引的表和列。

- WHERE子句:对要创建索引的数据进行筛选。

8. DROP TABLE语句的执行顺序:- DROP TABLE子句:指定要删除的表的名称。

9. TRUNCATE TABLE语句的执行顺序:- TRUNCATE TABLE子句:指定要清空的表的名称。

sql的执行流程

sql的执行流程

sql的执行流程SQL的执行过程是指将SQL语句转换成实际操作数据库的过程。

SQL语言是一种高级语言,虽然简单易懂,但是实际执行时却需要经过多方面的处理。

1. 词法分析SQL语句首先要经过词法分析,将SQL语句中的每个单词、符号等进行在此阶段进行识别、分类、拆解,变成一个个独立的语言成分。

这个处理过程被称为标记化。

其实就是将SQL语句逐个字符逐个字符组合起来,形成不同的单词。

对于不同的单词采取不同的处理方式。

例如,对于SELECT语句,要分解为SELECT、*、FROM、table等单词。

将经过词法分析的结果进行语法分析。

语法分析依赖于事先定义的语法规则,将标记化后的字符序列转化成一棵语法树,使得语句的结构和语义被更准确地表达出来,同时将错误和矛盾进行识别和处理。

3. 语义解析对SQL执行的第三个阶段是语义解析。

语义解析是指对SQL语句的具体含义进行解释,包括表名、字段名、类型、长度、函数等信息的解析,从信息部分进行转换。

4. 优化阶段在不改变SQL语句结果的前提下,通过改变多种执行计划的方式来确定最佳的执行计划,从而让SQL语句的执行效率更高,避免了浪费资源的情况。

在这个阶段,会考虑如何避免表的重复扫描、如何利用索引等问题。

5. 执行阶段经过词法分析、语法分析、语义解析和优化的SQL语句将被执行。

执行SQL语句需要数据库系统从磁盘读取数据、进行表Join、对数据进行Group By、对数据进行排序等等,执行过程complex,也是一串复杂流程的集合。

6. 结果处理阶段经过以上步骤,若顺利完成,那么接下来的步骤就是将执行完毕的结果处理并将其返回给用户。

用户得到返回的数据后,再进行后续的处理。

总的说来,SQL的执行流程非常复杂,需要经过多个步骤的处理来实现。

不过,每个步骤都有它的独特作用和功能,其中的每一步都是必不可少的。

sql语句的执行过程

sql语句的执行过程

sql语句的执行过程
SQL语句的执行过程主要包括以下几个步骤:
1.语法分析:数据库系统会对输入的SQL语句进行语法分析,检查语句是否符合SQL语法规范,如果语法有误则会抛出错误信息。

2.语义分析:在语法分析的基础上,数据库系统会对语句进行语义分析,检查语句中的表、列、数据类型等是否存在或合法。

3.查询优化:对于查询语句,数据库系统会根据表的结构和索引等信息,通过优化器对查询进行优化,找到最优的执行计划。

4.访问数据库:根据查询语句的执行计划,数据库系统会访问数据库中的数据,读取或修改相应的表和行。

5.数据返回:查询语句执行完成后,数据库系统会将结果返回给应用程序或客户端。

如果是DML语句(如INSERT、UPDATE、DELETE),则返回被影响的行数。

6.事务处理:在执行过程中,数据库系统会根据事务的隔离级别和事务控制语句(如BEGIN、COMMIT、ROLLBACK)来进行事务处理,保证数据的一致性和完整性。

注:以上是一般情况下的SQL语句执行过程,不同的数据库系统可能会有一些差异,具体执行过程可能会有所变化。

mysql 中的 sql执行流程

mysql 中的 sql执行流程

mysql 中的 sql执行流程Mysql 中的 SQL 执行流程概述•MySQL 是一款广泛使用的开源关系型数据库管理系统,它使用SQL 语言进行数据管理和操作。

•SQL 执行流程是指 MySQL 在执行 SQL 语句时的内部运行过程,包括解析 SQL 语句、优化执行计划、执行计划等多个步骤。

SQL 执行流程步骤1.解析 SQL 语句–MySQL 首先会对输入的 SQL 语句进行解析,判断语法的正确性和合法性。

–解析过程包括词法分析和语法分析,将 SQL 语句转换成抽象语法树(AST)表示。

2.语义分析–在语义分析阶段,MySQL 对解析得到的抽象语法树进行分析,并验证 SQL 语句是否符合语义规则。

–语义分析会检查表名、列名的存在性、权限等,并进行相应的错误提示或警告。

3.优化执行计划–在优化执行计划阶段,MySQL 会根据 SQL 语句的查询需求和数据库的特点,生成多个执行计划。

–MySQL 内部会使用优化器选择出最优的执行计划,以提高查询效率。

–优化过程包括索引选择、连接顺序优化、子查询优化等。

4.执行计划–在执行计划阶段,MySQL 会根据最优的执行计划,按照特定的流程执行 SQL 语句。

–MySQL 会使用存储引擎的接口,读取和写入数据。

存储引擎的作用•存储引擎是 MySQL 中负责底层数据存储和管理的模块,不同的存储引擎有不同的特点和适用场景。

•MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。

InnoDB 存储引擎•InnoDB 是 MySQL 中最常用和性能较好的存储引擎。

•InnoDB 支持事务和行级锁,具有高并发性和数据一致性。

MyISAM 存储引擎•MyISAM 是 MySQL 的另一个常用的存储引擎。

•MyISAM 不支持事务,但在读写比较均衡的场景下,有较好的性能。

Memory 存储引擎•Memory 存储引擎将数据存储在内存中,适用于一些读写频繁但数据不需要长期存储的场景。

Oracle执行SQL查询语句的步骤

Oracle执行SQL查询语句的步骤

Oracle执⾏SQL查询语句的步骤
sql语句的执⾏主要由⽤户进程与服务器进程来完成,其他的⼀些进程可能要辅助完成这⼀过程。

查询语句与其他的sql语句有所不同,如果⼀个查询语句执⾏成功,就要返回查询结果,⽽其他的sql语句只是返回执⾏成功或失败的信息。

查询语句的主要
SQL语句的执⾏主要由⽤户进程与服务器进程来完成,其他的⼀些进程可能要辅助完成这⼀些过程。

查询语句与其他的SQL语句有所不同,如果⼀个查询语句执⾏成功,就要返回查询结果,⽽其他的SQL语句只是返回执⾏成功或执⾏失败的信息。

查询语句的处理主要包括以下3个阶段:编译,执⾏和提取数据。

编译:在进⾏编译时,服务器进程将SQL语句的正⽂放⼊共享池的库⾼速缓存中并将完成以下处理。

1.⾸先在共享池中搜索是否有相同的SQL语句,如果没有就进⾏后续的处理。

2.检查该SQL语句的语法是否正确
3.通过查看数据字典来检查表和列的定义
4.对所操作的对象加编译锁,以便在编译语句期间这些对象的定义不能被改变
5.检查锁引⽤对象的权限
6.⽣成执⾏该SQL语句所需要的优化的执⾏条件
7.将SQL语句的执⾏计划装⼊共享的SQL区
执⾏:oracle服务器进程开始执⾏SQL语句是因为它已获得了执⾏SQL语句所需要的全部资源和信息。

提取数据:oracle服务器进程所选择所需的数据⾏,并在需要时将其排序,最后将结果返回给⽤户。

ORACLESQL语句执行流程与顺序原理解析

ORACLESQL语句执行流程与顺序原理解析

ORACLESQL语句执行流程与顺序原理解析在ORACLESQL中,执行一个SQL语句的流程和顺序如下:1.语法分析:首先,ORACLE会对SQL语句进行语法分析,检查语法的正确性和完整性。

如果SQL语句存在语法错误,ORACLE会报错并中止执行。

2.词法分析:在语法分析之后,ORACLE会对SQL语句进行词法分析,将语句分解为最小的语义单元,如关键字、表名、列名等。

这些语义单元被存储在内部数据结构中,以供后续处理使用。

3.查询优化:在语法和词法分析之后,ORACLE会进行查询优化,以确定最佳的执行计划。

查询优化是一个复杂的过程,其中包括确定表的访问顺序、连接顺序、选择合适的索引等。

ORACLE会根据统计信息和系统设置来评估每个可能的执行计划,并选择成本最低的执行计划作为最终的执行方案。

4.查询执行:一旦确定了最佳的执行计划,ORACLE就开始执行SQL查询。

查询执行过程通常包括以下步骤:a.打开表:根据执行计划,ORACLE会按照指定的顺序打开需要查询的表。

b.获取数据:ORACLE会根据执行计划从打开的表中获取需要的数据。

这个过程包括索引的查找、数据块的读取等。

c.执行操作:一旦获取到数据,ORACLE会执行SQL语句中指定的操作,如查询、插入、更新等。

这些操作会在内存中进行,直到事务提交或回滚。

d.关闭表:当查询完成后,ORACLE会关闭查询过程中打开的表,释放相关的资源。

5.结果返回:最后,ORACLE将查询的结果返回给客户端。

这些结果可以是查询结果集、插入、更新的行数等。

总结起来,ORACLESQL语句的执行流程可以简单概括为语法分析、词法分析、查询优化、查询执行和结果返回。

这个过程确保了SQL语句的正确性和效率。

1条sql执行的完整过程

1条sql执行的完整过程

1条sql执行的完整过程当一条SQL语句被提交给数据库执行时,它需要经过多个步骤才能完成。

以下是SQL语句执行的完整过程:1. **解析(Parsing)**:* 查询首先被解析器解析。

解析器检查SQL语句的语法和结构,并创建一个解析树。

* 语法错误在这个阶段会被检测出来。

2. **预处理(Preprocessing)**:* 在预处理器中,解析器检查是否有任何语法错误,并确保所有的对象(如表和视图)都存在并且可以访问。

* 预处理器还会处理一些简单的查询重写,例如处理别名和子查询。

3. **优化(Optimization)**:* 在这个阶段,查询优化器会生成多个可能的执行计划,并选择一个最优的计划来执行查询。

* 优化器会考虑多种因素,如表的大小、索引的存在与否、数据的分布等,来决定最佳的执行策略。

4. **生成执行计划(Plan Generation)**:* 一旦选择了最优的执行计划,就会生成一个或多个执行计划。

这些计划描述了数据库如何实际执行查询。

5. **执行(Execution)**:* 在这个阶段,数据库引擎根据执行计划执行查询。

这可能涉及到读取数据、连接表、过滤记录等操作。

6. **返回结果(Result Returning)**:* 最后,查询的结果被返回给客户端。

这可能是一个表、一行数据、一个状态码等,具体取决于查询的类型和需求。

7. **后处理(Postprocessing)**:* 在某些情况下,可能还需要进行一些后处理步骤,例如处理事务或清理资源。

注意:不同的数据库系统可能会有不同的执行步骤或略有不同的执行顺序。

上述过程是一个通用的概述。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 查询优化工作是要找到可能是最好的执行计划
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
优化程序模式
• 基于规则的优化程序(RBO)
这种优化程序基于一组规则建立查询计划。它不考虑对象尺寸、列的基数、数据的分布、排序 。查询优化只能利用已经编好的规则。
• 基于成本的优化程序(CBO)
SQL语句的执行过程
Hale Waihona Puke 路漫漫其修远兮, 吾将上下而求索
2020年4月9日星期四
♦ SQL语句的执行过程 ♦ 数据库的内存结构
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
SQL语句的类型
• DDL(数据定义语言) • DML(数据操纵语言)
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
硬分析和软分析
• 分析查询 • 检查语法 • 验证语义 • 计算散列值 • 找到一个匹配 • 验证存在一个与我们的查询完全相同的查询(引用相同的对象) • 确认我们具有访问所有引用对象的必须的权限 • 验证语句在相同的环境中执行 如果是软分析就直接跳过下面的优化和行资源生成这一重要步骤
路漫漫其修远兮, 吾将上下而求索
DDL(数据定义语言)
• 修改Oracle数据字典所执行的语句。它们是创建表、 删除表中的列、创建触发器等的语句
例如: CREATE TABLE、CREATE USER、CREATE PACKAGE、ALT CREATE PROCEDURE
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
共享池检查
• 共享池概念是Oracle体系结构的一个关键成分。共享池是Oracle共享全局区 块内存,其中库高速缓存区存放以前执行过的SQL语句、PL/SQL代码,数 存放字典信息
硬分析 软分析
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
分析
• 语法分析
查询是不是合法的语句
• 语义分析
如果是合法的语句,还需要检查是否具有访问权限、访问的列是否在所访问 在歧义
• 共享池检查
如果是DML语句还需要进行共享池检查,此语句是否已经被其他用户分析过 经执行的工作,如果是就进行软分析,如果不是就进行硬分析。DDL总是
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
• OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
• call count
cpu elapsed
disk
query current
rows
• ------- ------ -------- ---------- ---------- ---------- ---------- ----------
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
10:34:55 SQL> select * from dept;
Elapsed: 00:00:00.10
Execution Plan ---------------------------------------------------------Plan hash value: 3383998547
拓明科技Oracle数据库内部培训资料
优化和行资源生成
• 所有DML语句第一次提交给Oracle时,在它们的生存期中至少要优化一次 析中。语句义上和语法上完全相同,且执行环境也相同的语句的执行可以 的工作。在此情形下,对它们进行软分析。
• 硬分析包括查询优化步骤。这是一种费劲的、CPU密集型的处理过程,所 句的实际执行时间还要长。
• total 4880
0.93
0.98
0
7973
29
72696
• count:提供OCI过程的执行次数 • CPU: 提供执行CPU所花的时间单位是秒 • Elapsed:提供了执行时所花的时间。单位是秒。这个参数值等于用户响应时间 • Disk:提供缓存区从磁盘读取的次数 • Query:以一致性模式从缓存区获得数据的次数 • Current:以当前模式从缓存区获得数据的次数 • ROWs: 返回调用或执行调用时,处理的数据行的数量。
DML(数据操纵语言)
• 访问和修改数据库中数据所执行的语句。这些语句包 INSERT、MERGE、UPDATE和DELETE命令
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
语句执行过程
• Oracle执行一条语句从开始到结束经过4个步骤: 分析 对提交的语句进行语法和语义检查 优化 生成一个可在数据库中用来执行语句的最佳计划 行资源生成 为会话取得最佳计划和建立执行计划 语句执行 完成实际执行查询的行资源生成步骤的输出
这种优化程序根据收集的实际访问数据的统计信息对查询进行优化。在确定最合适的计划是, 集的尺寸以及许多其他信息。CBO将生成许多(或许数千)可能的查询计划(解决查询的预 查询计划赋予一个数值成本。采用具有最低成本的查询计划
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
行资源生成
• Parse
12
0.04
0.12
0
2
0
0
• Execute 12
0.02
0.04
0
268
29
23
• Fetch 4856
0.86
0.81
0
7703
0
72673
• ------- ------ -------- ---------- ---------- ---------- ---------- ----------
• 优化之后就是行资源生成,行资源生成器是Oracle中的一个软件,它接受 将它格式化为实际的执行计划。
例如:在使用SQL*PLUS中的AUTOTRACE实用程序时,它打印查询计划
路漫漫其修远兮, 吾将上下而求索
拓明科技Oracle数据库内部培训资料
执行
• 语句执行的最后步骤是利用资源生成器的输出实际执行语句。它是DML执 性的步骤。可以跳过分析、优化和行资源生成步骤。反复执行语句。因为 高效的方法,只要有可能,我们都希望建立符合“分析一次,执行许多次 序。
相关文档
最新文档