oracle sql 语句执行顺序

作者&投稿:司马刚 (若有异议请与网页底部的电邮联系)
oracle怎样跟踪一条sql语句的执行过程?~

需要建立一张表来记录
explain plan SET statement_id='name' FOR (这里是你要调试的语句 )

SELECT
A.OPERATION,
OPTIONS,
OBJECT_NAME,
OBJECT_TYPE,
ID,
PARENT_ID
FROM
PLAN_TABLE A
WHERE
STATEMENT_ID='name'
ORDER BY
Id;

ID 'name'是一个标识,你可以自己取,字段有很多个,以下是各个字段的解释(可能格式不对,你可以复制后看):

字段名 字段类型 含义
STATEMENT_ID VARCHAR2(30) explain PLAN 语句中所指定的最优STATEMENT_ID 参数值, 如果在EXPLAN PLAN语句中没有使用SET STATEMENT_ID,那么此值会被设为NULL。

REMARKS VARCHAR2(80) 与被解释规划的各步骤相关联的注释最长可达80 字节

OPERATION VARCHAR2(30) 各步骤所执行内部操作的名称在某条语句所产生的第一行中该列的可能取值如下DELETE STATEMENT INSERT STATEMENT SELECT STATEMENT UPDATE STATEMENT

OPTIONS VARCHAR2(30) 对OPERATION 列中所描述操作的变种

OBJECT_NODE VARCHAR2(128) 用于访问对象的数据库链接database link 的名称对于使用并行执行的本地查询该列能够描述操作中输出的次序

OBJECT_OWNER VARCHAR2(30) 对于包含有表或索引的架构schema 给出其所有者的名称

OBJECT_NAME VARCHAR2(30) 表或索引的名称

OBJECT_INSTANCE INTEGER 根据对象出现在原始original 语句中的次序所给出的相应次序编号就原始的语句文本而论其处理顺序为自左至右自外向内景象扩张view

OBJECT_TYPE VARCHAR2(30) 用于提供对象描述性信息的修饰符例如索引的NON-UNIQUE

OPTIMIZER VARCHAR2(255) 当前优化程序的模式

ID INTEGER 分配给执行规划各步骤的编号

PARENT_ID INTEGER 对ID 步骤的输出进行操作的下一个执行步骤的ID

POSITION INTEGER 对于具有相同PARENT_ID 的步骤其相应的处理次序

COST INTEGER 根据优化程序的基于开销的方法所估计出的操作开销值对于使用基于规则方法的语句该列为空该列值没有特定的测量单位它只是一个用于比较执行规划开销大小的权重值

CARDINALITY INTEGER 根据基于开销的方法对操作所访问行数的估计值

BYTES INTEGER 根据基于开销的方法对操作所访问字节的估计
=============================================

你按照我说的做,后面用
SELECT
*
FROM
PLAN_TABLE A
WHERE
STATEMENT_ID='name'

结果已经很清楚了,全部满足你的要求。
各列的具体含义上面已经给出。

where 里面条件 and 是先执行 and 前面 还是后面条件这个其实和你写的顺序不大,这个先后顺序,是数据库来根据表/索引的信息来决定的。例如一个 学生表, 有学号,姓名,性别其中 学号是主键, 姓名上面有个索引。 找 名字叫 强妹 的女生: SELECT * FROM 学生 WHERE 姓名='强妹' AND 性别 = '女' 与 SELECT * FROM 学生 WHERE 性别 = '女' AND 姓名='强妹' 数据库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的数据,去筛选 性别=女的比如表里面共有10000行。姓名叫 '强妹' 的只有一个。那么通过索引,一步就定位到那一行。然后再判断这一行数据的 性别字段, 是不是 = '女' 假如 姓名/性别 都没有索引呢?那就是执行 全表扫描。不分先后。什么意思呢?就是假如 表里面10000行数据。那就是从第一行开始, 查看 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。并不是一口气把所有的数据,都放到内存里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。蓝屏

where 里面条件 and 是先执行 and 前面 还是后面条件
这个其实和你写的顺序不大,这个先后顺序,是数据库来根据表/索引的信息来决定的。
例如一个 学生表, 有学号,姓名,性别
其中 学号是主键, 姓名上面有个索引。

找 名字叫 强妹 的女生:
SELECT * FROM 学生 WHERE 姓名='强妹' AND 性别 = '女'

SELECT * FROM 学生 WHERE 性别 = '女' AND 姓名='强妹'

数据库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的数据,去筛选 性别=女的
比如表里面共有10000行。姓名叫 '强妹' 的只有一个。
那么通过索引,一步就定位到那一行。
然后再判断这一行数据的 性别字段, 是不是 = '女'

假如 姓名/性别 都没有索引呢?
那就是执行 全表扫描。
不分先后。
什么意思呢?
就是假如 表里面10000行数据。
那就是从第一行开始, 查看 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。
并不是一口气把所有的数据,都放到内存里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。

oracle 是先执行 and 后面的,是因为解析sql语句的编译器是从右往左编译

当然会有关系的,首先and越多条件越细,这样数据库检索的速度会更快 where 里面如果没有括号限制,则先执行优先级高的,and 、or

执行顺序和数据库有关,不同的数据库有不同的解析顺序。
ORACLE是从后往前解析的,也就是先解析and后面的。
但是在调优上,ORACLE版本是基于CBO规则的(比如10G)就可以不考虑and的先后顺序调优,如果是基于RBO规则(比如8i),调整ANd的先后顺序可以达到优化的效果。

SQL语句从语句结束的位置,从右向左执行


电白县19716952441: oracle数据库语句执行顺序 -
况钢先奎: 先执行 (select * from deptinfo) 因为 完成要用的结果作为一张表临时表,然后又需要用 这个临时表中的rownum ,最外成select * from (select a.*,rownum rn from (select * from deptinfo) a where rownum<=10) where rn>=1 用到了第二...

电白县19716952441: SQL语句到底是怎么执行的 -
况钢先奎: 下面先给出上面的SQL语句的执行顺序,然后进行讲解: (8)select (9)distinct (11)top 1 (6)Table1.id,COUNT(Table1.name) as nameCount (1)from Table1 (3)inner join Table2 (2)on Table1.id=Table2.id (4)where Table1.id<4 (5)group ...

电白县19716952441: sql,oracle中语句执行顺序?sql中between 20 and 0 是否和0 and 20所查出的数据一样? -
况钢先奎: between and 相当于大于等于一个值,而小于等于另一个值 between 20 and 0 表示大约等于20并且小于等于0,这样的数据根本就不会存在 回答者: ytbelwxg同意

电白县19716952441: sql语句执行顺序、 -
况钢先奎: SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选分组; 6、计算所有的表达式; 7、使用order by对结果集进行排序. 8、select 集合输出.

电白县19716952441: oracle sql语句中 先执行where还是order by
况钢先奎: 一般情况下先执行where后order by.

电白县19716952441: sql 语句中同时使用 top 、 where、 order by, 它们的执行顺序是怎样的 -
况钢先奎: WHERE最先,根据WHERE条件先找出所有数据,WHERE内部的顺序是从后往前,右往左. 然后是ORDER BY顺序整理,如果是ORACLE使用ROWNUM控制就不是了. 最后是TOP N截出前N行.

电白县19716952441: 一条sql的整个过程是怎样的 -
况钢先奎: SQL语句执行过程详解 一、SQL语句执行原理:第一步:客户端把语句发给服务器端执行 当我们在客户端执行 select 语句时,客户端会把这条 SQL 语句发送给服务器端,让服务器端的 进程来处理这语句.也就是说,Oracle 客户端是不会做任...

电白县19716952441: SQL的执行顺序,如:( Select,From,Where Group By , Order By)如何的顺序 -
况钢先奎: SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句...

电白县19716952441: sql语句中的where语句和order by语句,哪个语句先执行 -
况钢先奎: where 先执行: SQL 语句执行顺序:SELECTFROM --1 WHERE --2 GROUP BY --3 HAVING --4ORDER BY --5

电白县19716952441: oracle执行计划顺序怎么看 -
况钢先奎: 你可以在plsql中看sql语句的执行计划,在plsql中,输入完sql语句后,按F5,则会出现sql语句的执行计划和耗费的成本.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网