SQL语句的执行过程

查询优化工作是要找到可能是最好的执行计划
拓明科技Oracle数据库内部培训资料
基于规则的优化程序(RBO)
这种优化程序基于一组规则建立查询计划。它不考虑对象尺寸、列的基数、数据的分布、 排序区尺寸以及其它因素。查询优化只能利用已经编好的规则。
基于成本的优化程序(CBO)
这种优化程序根据收集的实际访问数据的统计信息对查询进行优化。在确定最合适的计划 是,它将使用行数、数据集的尺寸以及许多其他信息。CBO将生成许多(或许数千) 可能的查询计划(解决查询的预备途径),并给每个查询计划赋予一个数值成本。采 用具有最低成本的查询计划
拓明科技Oracle数据库内部培训资料
访问和修改数据库中数据所执行的语句。这些语句 包括SELECT、INSERT、MERGE、UPDATE和 DELETE命令
拓明科技Oracle数据库内部培训资料
Oracle执行一条语句从开始到结束经过4个步骤: 分析 对提交的语句进行语法和语义检查 优化 生成一个可在数据库中用来执行语句的最佳计划 行资源生成 为会话取得最佳计划和建立执行计划 语句执行 完成实际执行查询的行资源生成步骤的输出
拓明科技Oracle数据库内部培训资料
优化之后就是行资源生成,行资源生成器是Oracle中的一个软件,它 接受优化程序的输出,将它格式化为实际的执行计划。
例如:在使用SQL*PLUS中的AUTOTRACE实用程序时,它打印查询计 划
拓明科技Oracle数据库内部培训资料
语句执行的最后步骤是利用资源生成器的输出实际执行语句。它是 DML执行中唯一的强制性的步骤。可以跳过分析、优化和行资源生成 步骤。反复执行语句。因为这是目前为止最高效的方法,只要有可能, 我们都希望建立符合“分析一次,执行许多次”规则的应用程序。
拓明科技Oracle数据库内部培训资料
所有DML语句第一次提交给Oracle时,在它们的生存期中至少要优化 一次。优化发生在硬分析中。语句义上和语法上完全相同,且执行环 境也相同的语句的执行可以利用以前硬分析的工作。在此情形下,对 它们进行软分析。
硬分析包括查询优化步骤。这是一种费劲的、CPU密集型的处理过程, 所花的时间可能比语句的实际执行时间还要长。
拓明科技Oracle数据库内部培训资料
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call
count
cpu elapsed
disk
query current
rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
--------------------------------------------------------------------------
| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
拓明科技Oracle数据库内部培训资料
10:34:55 SQL> select * from dept;
Elapsed: 00:00:00.10
Execution Plan ---------------------------------------------------------Plan hash value: 3383998547
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
------- ------ -------- ---------- ---------- ---------- ---------- ----------
SQL语句的执行过程
路漫漫其悠远
拓明科技Oracle数据库内部培训资料
DDL(数据定义语言) DML(数据操纵语言)
拓明科技Oracle数据库内部培训资料
修改Oracle数据字典所执行的语句。它们是创建表、 增加用户、删除表中的列、创建触发器等的语句
例如: CREATE TABLE、CREATE USER、CREATE PACKAGE、ALTER TABLE、CREATE PROCEDURE
拓明科技Oracle数据库内部培训资料
语法分析
查询是不是合法的语句
语义分析
如果是合法的语句,还需要检查是否具有访问权限、访问的列是否在所 访问的表中、是否存在歧义
共享池检查
如果是DML语句还需要进行共享池检查,此语句是否已经被其他用户分 析过且Oracle可重用已经执行的工作,如果是就进行软分析,如果不 是就进行硬分析。DDL总是硬分析,从不重用
total
4880
0.93
0.98
0
7973
29
72696
count:提供OCI过程的执行次数 CPU: 提供执行CPU所花的时间单位是秒 Elapsed:提供了执行时所花的时间。单位是秒。这个参数值等于用户响应时间 Disk:提供缓存区从磁盘读取的次数 Query:以一致性模式从缓存区获得数据的次数 Current:以当前模式从缓存区获得数据的次数 ROWs: 返回调用或执行调用时,处理的数据行的数量。
拓明科技Oracle数据库内部培训资料
共享池概念是Oracle体系结构的一个关键成分。共享池是Oracle共享 全局区(SGA)中的一块内存,其中库高速缓存区存放以前执行过的 SQL语句、PL/SQL代码,数据字典高速缓存区存放字典信息
硬分析 软分析
拓明科技Oracle数据库内部培训资料
分析查询 检查语法 验证语义 计算散列值 找到一个匹配 验证存象的必须的权限 验证语句在相同的环境中执行 如果是软分析就直接跳过下面的优化和行资源生成这一重要步骤
合集下载

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

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

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

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

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

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

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

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

flink sql执行流程

flink sql执行流程

flink sql执行流程Flink SQL执行流程是指Flink在处理SQL查询时的具体执行过程。

下面以Flink 1.12版本为例,详细描述了Flink SQL的执行流程。

1. 解析SQL语句:Flink SQL首先会对输入的SQL语句进行解析,将其转换为逻辑执行计划。

解析过程包括词法分析、语法分析和语义分析。

词法分析将输入的SQL语句分解为一个个的token;语法分析将tokens序列转换为抽象语法树(AST);语义分析将AST转换为逻辑执行计划。

2. 优化执行计划:Flink SQL会对生成的逻辑执行计划进行优化,包括逻辑优化和物理优化。

逻辑优化主要考虑查询的语义等价转换和逻辑规则的应用,以提高查询性能;物理优化主要考虑查询的物理执行计划生成,包括选择合适的物理算子、优化数据传输等。

3. 生成任务图:优化后的执行计划将转换为任务图,任务图是Flink作业的执行图形表示,用于描述作业的数据依赖关系以及任务之间的执行关系。

任务图由一系列的模块(源任务、转换任务、汇任务)和边(数据通道)组成。

4. 提交作业:生成的任务图将被提交到Flink的作业管理器。

作业管理器根据任务图生成作业提交请求,并将作业提交给资源管理器。

资源管理器根据可用资源的情况进行资源调度,分配任务给TaskManager。

5. 执行作业:TaskManager接收到作业后,会根据任务图中的任务进行执行。

每个TaskManager都根据任务图中的任务在本地执行相应的计算任务,计算结果可以存储在内存中或者持久化到外部系统中。

6. 并发处理:Flink支持作业的并发执行,多个TaskManager可以同时执行不同任务,以实现并行计算。

在并行计算中,TaskManager之间可以通过网络进行数据传输和交换。

数据会根据任务图中的数据通道进行传输,以满足任务间的数据依赖关系。

7. 结果输出:Flink任务执行完后,可以根据需要将计算结果输出。

带LeftJoin的SQL语句的执行顺序

带LeftJoin的SQL语句的执行顺序

带LeftJoin的SQL语句的执⾏顺序
本⽂转载⾃:作者:mcad 转载请注明该声明。

基础的SQL执⾏顺序
SQL语句执⾏的时候是有⼀定顺序的。

理解这个顺序对SQL的使⽤和学习有很⼤的帮助。

1.from
先选择⼀个表,或者说源头,构成⼀个结果集。

2.where
然后⽤where对结果集进⾏筛选。

筛选出需要的信息形成新的结果集。

3.group by
对新的结果集分组。

4.having
筛选出想要的分组。

5.select
选择列。

6.order by
当所有的条件都弄完了。

最后排序。

带连接的SQL语句执⾏顺序(以Left Join为列)
我的理解是这样,SQL语句中⽆论是否连接的其他表。

⽆论如何都要先形成⼀个结果集。

后⾯的顺序不变!
只不过使⽤连接时,形成结果集合的⽅式略有不同。

这个和 Left Join的实现原理有关。

select ,
from T_left a //1
Left Join T_Right b //3
ON a.id = b.id //2
使⽤Left Join 形成结果集的⽅式是这样的。

1.⾸先对From⼦句中的前两个表,执⾏笛卡尔积运算。

运算结果形成⼀个结果集合。

2. ON按条件,对上边的结果集,进⾏筛选,形成新的结果集。

3.以左连接为例,如果T_left中存在未匹配到的⾏。

那么把T_left中的这⼏⾏以外部⾏的形式加到上边的结果集中形成新的结果集。

4.如果存在多张表,重复1~3过程!。

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 存储引擎将数据存储在内存中,适用于一些读写频繁但数据不需要长期存储的场景。

创建jxgl数据库的sql语句

创建jxgl数据库的sql语句摘要:1.创建jxgl 数据库的背景和目的2.创建jxgl 数据库的SQL 语句3.SQL 语句的执行过程4.创建jxgl 数据库的意义和应用场景正文:1.创建jxgl 数据库的背景和目的在数据库技术中,SQL(结构化查询语言)是一种非常常见的语言,用于管理和操作关系型数据库。

在实际应用中,我们需要创建数据库来存储和管理数据,以便后续进行查询和分析。

本篇文章将介绍如何使用SQL 语句创建一个名为jxgl 的数据库。

2.创建jxgl 数据库的SQL 语句创建数据库的SQL 语句非常简单,只需使用CREATE DATABASE 语句,后面跟上数据库名称即可。

所以,创建jxgl 数据库的SQL 语句如下:```sqlCREATE DATABASE jxgl;```3.SQL 语句的执行过程要执行上面的SQL 语句,需要将此语句输入到数据库管理系统(如MySQL、Oracle 等)的命令行界面或者使用SQL 客户端工具连接到数据库后执行。

执行后的结果是,数据库管理系统会创建一个名为jxgl 的新数据库。

4.创建jxgl 数据库的意义和应用场景创建jxgl 数据库的意义主要体现在以下几点:a.数据集中存储:将数据存储在一个统一的数据库中,便于管理和维护。

b.数据安全:通过创建数据库,可以对数据进行权限控制,确保数据的安全性。

c.查询和分析:创建数据库后,可以利用SQL 语句对数据进行查询和分析,满足业务需求。

应用场景包括:a.企业数据管理:企业可以将员工信息、产品信息等数据存储在一个数据库中,便于统一管理和查询。

b.电商平台:电商平台需要存储大量的商品信息、订单信息等,创建数据库可以方便地进行数据管理和分析。

db2sql语句执行顺序.doc

★db2sql语句执行顺序DB2常用SQL语句集DB2常用SQL语句集1、查看表结构:describe table tablenamedescribe select * from tablename2、列出系统数据库目录的内容:list database directory3、查看数据库配置文件的内容:get database configuration for DBNAME4、启动数据库:restart database DBNAME5、关闭表的日志alter table TBLNAME active not logged inially6、重命名表rename TBLNAME1 to TBLNAME27、取当前时间select current time stamp from sysibm.sysdummy18、创建别名create alias ALIASNAME for PRONAME(table、viee)9、查询前几条记录select * from TBLNAME fetch first N ro TBLNAMEdb2 export to TBL.ixf of ixf select * from TBLNAME以指定分隔符‘|’下载数据:db2 export to cmmcode.txt of del modified by coldel| select * from cmmcode”14、导入表db2 import from TBL.txt of del insert into TBLNAMEdb2 import from TBL.txt of del mitcount 5000 insert into TBLNAMEdb2 import from TBL.ixf of ixf mitcount 5000 insert into TBLNAME db2 import from TBL.ixf of ixf mitcount 5000 insert_update intoTBLNAME db2 import from TBL.ixf of ixf mitcount 5000 replace into TBLNAMEdb2 import from TBL.ixf of ixf mitcount 5000 create into TBLNAME (仅IXF) db2 import from TBL.ixf of ixf mitcount 5000 replace_create into TBLNAME (仅IXF)以指定分隔符“|”加载:db2 import from btpoper.txt of del modified by coldel| insert into btpoper 15、显示当前用户所有表命令db2 “list tables”16、查看锁情况命令:db2 get snapshot for locks on DBNAMElist applications for db DBNAME shoonisor s TBNAME for update; for update不能和GROUP BY、DISTINCT、ORDER BY、FOR READ ONL Y及UNION, EXCEPT, or INTERSECT(但UNION ALL 除外)一起使用。

一条完整sql语句的执行顺序

一条完整sql语句的执行顺序摘要:1.SQL 语句的执行顺序2.SELECT 语句的执行顺序3.INSERT 语句的执行顺序4.UPDATE 语句的执行顺序5.DELETE 语句的执行顺序6.总结正文:SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的编程语言。

SQL 语句的执行顺序遵循一定的规范,本文将详细介绍一条完整SQL 语句的执行顺序。

1.SQL 语句的执行顺序SQL 语句的执行顺序可以分为以下几个步骤:(1)解析:将SQL 语句解析成抽象语法树(Abstract Syntax Tree,AST)。

(2)语义分析:对抽象语法树进行语义分析,检查SQL 语句的语法和语义是否正确。

(3)优化:将语义分析后的SQL 语句进行优化,生成执行计划。

(4)执行:根据优化后的执行计划,执行SQL 语句。

2.SELECT 语句的执行顺序(1)从WHERE 子句中选择满足条件的行。

(2)对SELECT 子句中的列进行投影。

(3)按照ORDER BY 子句中的顺序对查询结果进行排序。

(4)如果存在LIMIT 子句,则按照LIMIT 子句中的限制返回查询结果。

3.INSERT 语句的执行顺序INSERT 语句用于向表中插入数据。

其执行顺序如下:(1)将INSERT 语句解析成抽象语法树。

(2)对抽象语法树进行语义分析,检查INSERT 语句的语法和语义是否正确。

(3)生成插入数据的执行计划。

(4)根据执行计划,向表中插入数据。

4.UPDATE 语句的执行顺序UPDATE 语句用于更新表中的数据。

其执行顺序如下:(1)从WHERE 子句中选择需要更新的行。

(2)对UPDATE 子句中的列进行更新。

(3)如果存在ORDER BY 子句,则按照ORDER BY 子句中的顺序对更新结果进行排序。

(4)如果存在LIMIT 子句,则按照LIMIT 子句中的限制返回更新结果。

详细分析SQL语句逻辑执行过程和相关语法

详细分析SQL语句逻辑执⾏过程和相关语法1.1 SQL语句的逻辑处理顺序SQL语句的逻辑处理顺序,指的是SQL语句按照⼀定的规则,⼀整条语句应该如何执⾏,每⼀个关键字、⼦句部分在什么时刻执⾏。

除了逻辑顺序,还有物理执⾏顺序。

物理顺序是SQL语句真正被执⾏时的顺序(执⾏计划),它是由各数据库系统的关系引擎中的语句分析器、优化器等等组件经过⼤量计算、分析决定的。

很多时候因为优化的关系,使得语句最终的物理执⾏顺序和逻辑顺序不同。

按照逻辑顺序,有些应该先执⾏的过程,可能优化器会指定它后执⾏。

但不管是逻辑顺序还是物理顺序,设计了⼀条SQL语句,语句最后返回的结果不会也不能因为物理顺序改变了逻辑顺序⽽改变。

其实,逻辑顺序只是为我们编写、理解SQL语句提供些帮助,除此之外,它毫⽆⽤处。

⽽且,是不是真的存在⼀条严格且完整的执⾏顺序规则都是不确定的事情。

虽然某些书上、⽹上给出了⼀些顺序(我个⼈所知道的⽐较权威的,是SQL Server的"圣书"技术内幕⾥介绍过),但在任何⼀种数据库系统的官⽅⼿册上都没有关于这⽅⾯的介绍⽂档。

SQL Server和Oracle在语句的逻辑处理顺序上是⼀致的,在这⽅⾯,它们严格遵守了标准SQL的要求,任何⼀个步骤都遵循了关系型数据库的范式要求。

因为遵循了⼀些范式要求,导致标准SQL不允许使⽤某些语法。

但是MySQL、MariaDB和它们⼩有不同,它们对标准SQL进⾏扩展,标准SQL中不允许使⽤的语法,在MySQL、MariaDB中可能可以使⽤,但很多时候这会违反关系模型的范式要求。

虽然本⽂的最初⽬的是介绍MariaDB/MySQL语句的逻辑处理顺序,但在篇幅上对标准SQL介绍的更多,因为它们符合规范。

理解这些规范,实际上是在理解关系模型和集合模型。

本⽂也在多处通过这两个模型来分析为什么标准SQL不允许某些语法,以及为什么MySQL可以⽀持这些"不标准"的语法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档