sqlplus中查看执行计划分析
显示执行计划的语句
显示执行计划的语句1. 想知道数据库里执行计划咋显示?就像打开神秘宝盒一样,在SQL 里有个超酷的语句呢。
比如说我要查一个超复杂的学生成绩数据库,找出平均分最高的班级。
那我就可以用“EXPLAIN SELECT * FROMstudent_scores GROUP BY class_id ORDER BY AVG(score) DESC;”。
看,执行计划就像地图,告诉你数据库咋一步一步找答案的。
2. 显示执行计划的语句啊,就像是魔术师的揭秘咒语。
我跟你说,在Oracle数据库里,这个“EXPLAIN PLAN FOR”就超厉害。
就像我们一群小伙伴找宝藏,这个语句就像寻宝图的说明。
比如我们要找特定员工在某个项目里的工作时长总和,“EXPLAIN PLAN FOR SELECT sum(hours) FROM employee_project WHERE employee_id = 1001 ANDproject_id = 5001;”,一下子就把数据库执行的步骤“暴露”出来了。
3. 哟,你还不知道显示执行计划的语句呀?这可就像厨师做菜的步骤指南一样重要呢!在MySQL里,“EXPLAIN SELECT column1, column2 FROM your_table WHERE condition;”就这么简单。
就好比你和朋友一起整理书架,这个语句就告诉你数据库怎么在“书架”(表)里找你要的“书”(数据)。
我之前为了找有特定标签的博客文章,就用了类似的语句,一下就清楚数据库在干嘛了。
4. 显示执行计划的语句,那是数据库世界的X光机啊!拿PostgreSQL 来说,“EXPLAIN (ANALYZE, VERBOSE) SELECT * FROM products WHERE price > 100;”。
就像你要在一堆商品里找贵的东西,这个语句让你看到数据库怎么翻找这些“商品”(数据)的,它的每一个动作都逃不过你的眼睛,超神奇的呢!5. 嘿,想窥视数据库执行的小秘密吗?显示执行计划的语句就是那把钥匙。
查看ORACLE执行计划的几种常用方法
查看ORACLE执⾏计划的⼏种常⽤⽅法SQL的执⾏计划实际代表了⽬标SQL在Oracle数据库内部的具体执⾏步骤,作为调优,只有知道了优化器选择的执⾏计划是否为当前情形下最优的执⾏计划,才能够知道下⼀步往什么⽅向。
执⾏计划的定义:执⾏⽬标SQL的所有步骤的组合。
我们⾸先列出查看执⾏计划的⼀些常⽤⽅法:1. explain plan命令PL/SQL Developer中通过快捷键F5就可以查看⽬标SQL的执⾏计划了。
但其实按下F5后,实际后台调⽤的就是explain plan命令,相当于封装了该命令。
explain plan使⽤⽅法:(1) 执⾏explain plan for + SQL(2) 执⾏select * from table(dbms_xplan.display);实验表准备:SQL> desc test1;Name Null Type----------------------------------------- -------- ----------------------------T1ID NOT NULL NUMBER(38)T1V VARCHAR2(10)SQL> desc test2;Name Null Type----------------------------------------- -------- ----------------------------T2ID NOT NULL NUMBER(38)T2V VARCHAR2(10)实验:SQL> set linesize 100SQL> explain plan for select t1id, t1v, t2id, t2v from test1, test2 where test1.t1id = test2.t2id;Explained.第⼀步使⽤explain plan对⽬标SQL进⾏了explain,第⼆步使⽤select * from table(dbms_xplan.display)语句展⽰出该SQL的执⾏计划。
执行计划的6种查看方法
查看SQL的6种执行计划1.获取执行计划的6种方法1. explain plan for获取;2. set autotrace on;3. statistics_level=all;4.通过dbms_xplan.display_cursor输入sql_id参数直接获取;5. 10046 trace跟踪;6. awrsqrpt.sql;1.1 explain plan for步骤1:explain plan for "你的SQL"步骤2:select * from table(dbms_xplan.display());事例:优点:无需真正执行,快捷方便缺陷:1.没有输出运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况);2.无法判断是处理了多少行;3.无法判断表被访问了多少次。
因为这种执行计划,不会执行sql,只是通过采集表的信息,对sql进行了预估的一个计划。
1.2 set autotrace on步骤1:setautotrace on步骤2:在此处执行你的SQL即可,后续自然会有结果输出有以下几种情况可控选择,一般都选择第二种,我们不需要结果,只看计划。
set autotrace on:得到执行计划,输出运行结果;set autotracetraceonly:得到执行计划,不输出运行结果;set autotracetraceonly explain:得到执行计划,不输出运行结果和统计信息部分,仅展现执行计划部分;set autotracetraceonl statistics:不输出运行结果和执行计划部分,仅展现统计信息部分;事例:set timing on是否显示SQL执行时间,一般都显示。
alter system flush shared_pool;刷新共享池,我们知道共享池是编译解析执行sql的,同一个sql第二次执行的时候不会再进行解析编译,所以在看执行计划前都会先刷新共享池。
PLSQL执行计划查看
PLSQL执⾏计划查看⼀.如何查看PLSQL的执⾏计划在SQl Window窗⼝输⼊sql语句,然后按键"F5",就会进⼊执⾏计划查看界⾯。
⼆.界⾯说明⾸先我们看第⼆⾏有⼏个属性可以选“Tree”、“HTML”、“Text”、“XML”。
这⼏个⾥⾯的核⼼数据是⼀样的,不同的只是对核⼼数据的展⽰⽅式,分别为Tree、HTML、Text、XML。
这个可以根据个⼈习惯来进⾏选择。
再下⾯有⼏个列属性(每个⼈的列属性可能会不同,这个是可以在PLSQL中进⾏配置)我们⾸先看第⼀列的Description:下⾯的内容分别是我们这条SQL的执⾏步骤,缩进量最多的步骤最先执⾏,如果缩进量相同,则按照从上往下的顺序执⾏。
Object owner:对象的所有者。
Object name:对象名称。
Cost:成本花费。
这⾥可以详细地查看SQL执⾏的每⼀步的成本花费。
Time:执⾏时间。
三.如何优化SQL1.查看SQL是全表扫描还是利⽤索引查询。
假设有⼀张表t_srhs_jks,⾥⾯有1000万条数据,我们在这张表中执⾏⼀条SQL:我们可以看到根据条件dtnm=****查询数据,由于DTNM字段不是索引,因此⾸先执⾏了"TABLE ACCESS FULL",即全表搜索,然后再执⾏上⾯的"SELECT STATEMENT, GOAL = ALL ROWS"查询出所有数据⾏。
在这条SQL中的成本花费⼀共是14287(Cost=14287),执⾏时间是172(Time=172)。
然后我们对dtnm字段添加索引后再执⾏这条SQL:相⽐第⼀次执⾏,这⾥的成本花费只有5385,执⾏时间只有65,减少了将近⼀倍。
然后我们再来查看⼀下Description下的执⾏步骤:(1)INDEX RANGE SCAN:索引范围内查找。
(2)TABLE ACCESS BY INDEX ROWID:根据索引找到的ROWID来查找需要的数据。
plsql 执行计划
plsql 执行计划PL/SQL 执行计划是一个非常重要的主题,它能够帮助开发人员和数据库管理员优化查询性能,提高数据库操作效率。
执行计划是指数据库在执行SQL语句时的具体操作步骤和执行顺序。
在PL/SQL中,我们可以使用一些特定的命令或方法来获取和分析执行计划,从而帮助我们了解查询的性能和优化潜力。
接下来,本文将详细介绍PL/SQL 执行计划的相关内容。
一、什么是执行计划?在了解PL/SQL执行计划之前,我们首先需要了解执行计划的概念。
执行计划是数据库在执行SQL语句时生成的一种操作指导,它告诉数据库具体应该如何执行查询,并给出了每个操作的执行顺序、数据访问路径、加锁等信息。
通过执行计划,我们可以深入了解查询的执行过程,从而通过调整查询或优化数据库结构来提高查询性能。
二、如何获取执行计划?在PL/SQL中,我们可以使用EXPLAIN PLAN命令来获取查询的执行计划。
EXPLAIN PLAN是一种用于分析查询性能的工具,它可以将查询转化为一个逻辑执行计划,并显示在屏幕上。
具体使用方法如下:1. 首先,我们需要将要分析的SQL语句嵌入到一个PL/SQL块中。
例如,我们要分析如下的查询语句:```sqlSELECT *FROM employeesWHERE salary > 5000;```我们可以将它嵌入到一个PL/SQL块中,如下所示:```sqlDECLAREv_sql VARCHAR2(1000);BEGINv_sql := 'SELECT * FROM employees WHERE salary > 5000';EXECUTE IMMEDIATE 'EXPLAIN PLAN FOR ' || v_sql;END;```2. 然后,我们可以通过查询表执行计划的视图来获取执行计划。
在PL/SQL中,我们可以使用DBMS_XPLAN包提供的函数来获取执行计划。
PLSQL如何使用DBMS_XPLAN查看执行计划
查询执行计划更靠谱的方法:DBMS_XPLAN方法使用数据源DISPLAY Explain Plan Plan TableDISPLAY_CURSOR Real Plan Shared Pool的游标缓存DISPLAY_AWR History AWR仓库基表WRH$_SQL_PLAN DISPAL Y_SQLSET SQL Tuning SET SQL Set视图PS:红色标识的方法为常用方法步骤一:使用DISPLAY_CURSOR必须要对V$SQL,V$SQLPLAN_STA TISTICS_ALL,V$SESSION,V$SQLPLAN 四张视图有权限方法如下:对于普通用户查看那这四张表只能查看同义词这四个视图对应的表,如下图:SYSONYM_NAME TABLE_NAMEV$SQL V_$SQLV$SQLPLAN_STATISTICS_ALL V_$SQLPLAN_STATISTICS_ALLV$SESSION V_$SESSIONV$SQLPLAN V_$SQLPLAN步骤二:Alter session set statistics_level = all;(收集信息有开销)步骤三:执行select SQL步骤四:查询执行计划必须要设置set serveroutput off,本人无法在PL/SQL中无法设置,所以需指定SQL_IDSelect sql_id,sql_test from V$SQLWhere sql_text not like ‘%like%’And sql_text like ‘%SQL%’;查询结果如下图:步骤五:执行DBMS_XPLAN.DISPAL Y_CURSORSelect * from table(dbms_xpaln(SQL_ID,null,’ADV ANCED ALLSTATS LAST PEEKED_BINDS’));执行结果如下:以上资料来自刘相兵老师的培训视频,个人总结整理3步骤。
ORACLE数据库查看执行计划
ORACLE数据库查看执⾏计划基于ORACLE的应⽤系统很多性能问题,是由应⽤系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们⼀般通过查看该SQL的执⾏计划,本⽂就如何看懂执⾏计划,以及如何通过分析执⾏计划对SQL进⾏优化做相应说明。
⼀、什么是执⾏计划(explain plan)执⾏计划:⼀条查询语句在ORACLE中的执⾏过程或访问路径的描述。
⼆、如何查看执⾏计划1: 在PL/SQL下按F5查看执⾏计划。
第三⽅⼯具toad等。
很多⼈以为PL/SQL的执⾏计划只能看到基数、优化器、耗费等基本信息,其实这个可以在PL/SQL⼯具⾥⾯设置的。
可以看到很多其它信息,如下所⽰2: 在SQL*PLUS(PL/SQL的命令窗⼝和SQL窗⼝均可)下执⾏下⾯步骤SQL>EXPLAIN PLAN FORSELECT*FROM SCOTT.EMP; --要解析的SQL脚本SQL>SELECT*FROM TABLE(DBMS_XPLAN.DISPLAY);3: 在SQL*PLUS下(有些命令在PL/SQL下⽆效)执⾏如下命令:SQL>SET TIMING ON --控制显⽰执⾏时间统计数据SQL>SET AUTOTRACE ON EXPLAIN --这样设置包含执⾏计划、脚本数据输出,没有统计信息SQL>执⾏需要查看执⾏计划的SQL语句SQL>SET AUTOTRACE OFF --不⽣成AUTOTRACE报告,这是缺省模式SQL>SET AUTOTRACE ON --这样设置包含执⾏计划、统计信息、以及脚本数据输出SQL>执⾏需要查看执⾏计划的SQL语句SQL>SET AUTOTRACE OFFSQL>SET AUTOTRACE TRACEONLY --这样设置会有执⾏计划、统计信息,不会有脚本数据输出SQL>执⾏需要查看执⾏计划的SQL语句SQL>SET AUTOTRACE TRACEONLY STAT --这样设置只包含有统计信息SQL>执⾏需要查看执⾏计划的SQL语句SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]参考⽂档:SQLPlus User’s Guide and Reference Release 11.1注意:PL/SQL Developer ⼯具并不完全⽀持所有的SQL*Plus命令,像SET AUTOTRACE ON 就如此,在PL/SQL Developer⼯具下执⾏此命令会报错SQL> SET AUTOTRACE ON;Cannot SET AUTOTRACE4:SQL_TRACE可以作为参数在全局启⽤,也可以通过命令形式在具体SESSION启⽤4.1 在全局启⽤,在参数⽂件(pfile/spfile)中指定SQL_TRACE =true,在全局启⽤SQL_TRACE时会导致所有进程活动被跟踪,包括后台进程以及⽤户进程,通常会导致⽐较严重的性能问题,所以在⽣产环境要谨慎使⽤。
在Oracle中SQL语句执行计划分析
SQL性能优化和执行计划
什么是执行计划
在哪里可以找到执行计划
查看执行计划
EXPLAINPLAN 命令
EXPLAINPLAN 示例
PLAN_TABLE
显示PLAN_TABLE的内容
显示PLAN_TABLE的内容-ALL
显示PLAN_TABLE的内容-advanced
AUTOTRACE
AUTOTRACE-示例
AUTOTRACE-统计信息
使用v$sqn_statistics视图
V$SQL_PLAN_STATISTICS 提供实际执行统计信息:
– STATISTICS_LEVEL 设置为ALL – GATHER_PLAN_STATISTICS 提示
使用V$SQL_PLAN_STATISTICS_ALL,您可以一一 对 比优化程序的估计值与实际执行的统计值。
重要动态性能视图之间的联系
解释执行计划
Oracle查看执行计划的几种方法
Oracle查看执行计划的几种方法原创作者:lhrbest时间:2017-04-09 14:42:0123930Oracle查看执行计划的几种方法一般来说,有如下几种获取执行计划的方式:1、AUTOTRACE方式AUTOTRACE是Oracle自带的客户端工具SQL*Plus的一个特性。
启用AUTOTRACE后,SQL*Plus会自动收集执行过的SQL语句的执行计划、性能统计数据等,并在语句执行结束后显示在SQL*Plus中。
DBA用户可以直接使用AUTOTRACE功能,但是如果用户没有DBA权限,那么需要在SYS用户下执行plustrce.sql脚本,自动创建PLUSTRACE角色,再把PLUSTRACE权限赋给普通用户即可。
$ORACLE_HOME/sqlplus/admin/plustrce.sqlGRANT PLUSTRACE TO USER_LHR;另外,若启用AUTOTRACE报“SP2-0611”的错误,则可以执行utlxplan.sql脚本来创建表PLAN_TABLE,如下所示:SQL> set autot onSP2-0613: 无法验证 PLAN_TABLE 格式或实体SP2-0611: 启用EXPLAIN报告时出错SQL> @?/rdbms/admin/utlxplan.sql在执行如下脚本后,每个用户(包括以后新建的用户)都可以使用AUTOTRACE命令:@?/rdbms/admin/utlxplan.sqlCREATE PUBLIC SYNONYM PLAN_TABLE FOR PLAN_TABLE;GRANT ALL ON PLAN_TABLE TO PUBLIC;@?/sqlplus/admin/plustrce.sqlGRANT PLUSTRACE TO PUBLIC;AUTOTRACE的语法如下所示:SET AUTOTRACE {OFF|ON|TRACEONLY} [EXPLAIN] [STATISTICS]其中,AUTOTRACE可简写为AUTOT,TRACEONLY可简写为TRACE,EXPLAIN可简写为EXP,STATISTICS可简写为STAT。
plsql查看执行计划
plsql查看执行计划PL/SQL是Oracle数据库中的一种编程语言,可以用于编写存储过程、触发器、函数等数据库对象。
在进行PL/SQL编程时,我们经常需要查看执行计划来优化SQL语句的性能,以提高数据库的查询效率。
本文将介绍如何在PL/SQL中查看执行计划,帮助开发人员更好地优化数据库性能。
在PL/SQL中,我们可以使用DBMS_XPLAN包来查看SQL语句的执行计划。
DBMS_XPLAN包提供了多个过程,可以用于不同的场景下查看执行计划。
下面我们将介绍几种常用的方式来查看执行计划。
第一种方式是使用DBMS_XPLAN.DISPLAY_CURSOR过程来查看当前会话中最近执行的SQL语句的执行计划。
该过程需要指定SQL_ID 参数,可以通过v$session动态视图来获取当前会话的SQL_ID。
例如:```sql。
SELECT sql_id 。
FROM v$session 。
WHERE sid = sys_context('USERENV', 'SID');```。
得到SQL_ID后,我们可以使用DBMS_XPLAN.DISPLAY_CURSOR过程来查看执行计划:```sql。
SET LINESIZE 130。
SET PAGESIZE 0。
SET LONG 1000000。
EXEC DBMS_XPLAN.DISPLAY_CURSOR('SQL_ID');```。
上面的代码中,我们使用了SET命令来设置SQLPlus的显示格式,然后执行DBMS_XPLAN.DISPLAY_CURSOR过程来查看执行计划。
在执行结果中,我们可以看到SQL语句的执行计划、统计信息等。
第二种方式是使用DBMS_XPLAN.DISPLAY过程来查看指定SQL语句的执行计划。
该过程需要指定SQL_ID或者SQL语句文本作为参数。
例如:```sql。
EXEC DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SQL_ID','SQL_ID');```。
Oracle查看SQL执行计划的方式
Oracle查看SQL执⾏计划的⽅式Oracle查看SQL执⾏计划的⽅式获取Oracle sql执⾏计划并查看执⾏计划,是掌握和判断数据库性能的基本技巧。
下⾯案例介绍了多种查看sql执⾏计划的⽅式:基本有以下⼏种⽅式:1、通过sql_trace初始化参数2、通过Autotrace3、通过explain plan4、通过dbms_xplan.display_cursor5、通过dbms_xplan.display_awr6、通过10046事件1、通过explain plan ⼯具12:24:00 SCOTT@ prod>explain plan for12:24:06 2 select empno,ename,sal,deptno from emp where empno=7788;Explained.Elapsed: 00:00:00.2212:24:16 SCOTT@ prod>select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------Plan hash value: 2949544139--------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 46 | 2 (0)| 00:00:01 || 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 46 | 2 (0)| 00:00:01 ||* 2 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 1 (0)| 00:00:01 |--------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------2 - access("EMPNO"=7788)14 rows selected.Elapsed: 00:00:01.142、通过DBMS_XPLAN.display_cursor查看12:52:37 SCOTT@ prod>desc dbms_xplanFUNCTION DISPLAY_CURSOR RETURNS DBMS_XPLAN_TYPE_TABLEArgument Name Type In/Out Default?------------------------------ ----------------------- ------ --------SQL_ID VARCHAR2 IN DEFAULTCURSOR_CHILD_NO NUMBER(38) IN DEFAULTFORMAT VARCHAR2 IN DEFAULT如果以scott⽤户访问需要进⾏授权:12:31:44 SYS@ prod>select * from dict where upper(table_name)='V$SESSION';TABLE_NAME COMMENTS------------------------------ ----------------------------------------V$SESSION Synonym for V_$SESSIONElapsed: 00:00:00.0912:31:09 SYS@ prod>grant select on V_$SESSION to scott;Grant succeeded.Elapsed: 00:00:00.1012:43:15 SCOTT@ prod>select * from table(dbms_xplan.display_cursor(null,null,'advanced')); PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------User has no SELECT privilege on V$SQL_PLAN解决权限不⾜:12:42:33 SYS@ prod>grant select any table to scott;Grant succeeded.12:43:46 SYS@ prod>show parameter o7NAME TYPE VALUE------------------------------------ ----------- ------------------------------O7_DICTIONARY_ACCESSIBILITY boolean TRUE12:44:54 SYS@ prod>案例:dbms_xplan.display_cursor12:42:45 SCOTT@ prod>select empno,ename,sal,deptno from emp where empno=7788;EMPNO ENAME SAL DEPTNO---------- ---------- ---------- ----------7788 SCOTT 3000 20Elapsed: 00:00:00.0812:43:15 SCOTT@ prod>select * from table(dbms_xplan.display_cursor(null,null,'all'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------SQL_ID bqz9ujgnn4jzu, child number 0-------------------------------------select empno,ename,sal,deptno from emp where empno=7788Plan hash value: 2949544139--------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | | | 2 (100)| || 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 46 | 2 (0)| 00:00:01 ||* 2 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 1 (0)| 00:00:01 |--------------------------------------------------------------------------------------Query Block Name / Object Alias (identified by operation id):-------------------------------------------------------------PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------1 - SEL$1 / EMP@SEL$12 - SEL$1 / EMP@SEL$1Predicate Information (identified by operation id):---------------------------------------------------2 - access("EMPNO"=7788)Column Projection Information (identified by operation id):-----------------------------------------------------------1 - "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10], "SAL"[NUMBER,22],"DEPTNO"[NUMBER,22]2 - "EMP".ROWID[ROWID,10], "EMPNO"[NUMBER,22]32 rows selected.Elapsed: 00:00:00.05案例:12:49:10 SCOTT@ prod>select empno,ename,sal,deptno from emp where empno=7788;EMPNO ENAME SAL DEPTNO---------- ---------- ---------- ----------7788 SCOTT 3000 20Elapsed: 00:00:00.0012:50:06 SCOTT@ prod>select * from table(dbms_xplan.display_cursor(null,null,'advanced')); PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------SQL_ID bqz9ujgnn4jzu, child number 0-------------------------------------select empno,ename,sal,deptno from emp where empno=7788Plan hash value: 2949544139--------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | | | 2 (100)| || 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 46 | 2 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 1 (0)| 00:00:01 |--------------------------------------------------------------------------------------Query Block Name / Object Alias (identified by operation id):-------------------------------------------------------------PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------1 - SEL$1 / EMP@SEL$12 - SEL$1 / EMP@SEL$1Outline Data-------------/*+BEGIN_OUTLINE_DATAIGNORE_OPTIM_EMBEDDED_HINTSOPTIMIZER_FEATURES_ENABLE('11.2.0.1')DB_VERSION('11.2.0.1')ALL_ROWSOUTLINE_LEAF(@"SEL$1")INDEX_RS_ASC(@"SEL$1" "EMP"@"SEL$1" ("EMP"."EMPNO"))END_OUTLINE_DATA*/PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------2 - access("EMPNO"=7788)Column Projection Information (identified by operation id):-----------------------------------------------------------1 - "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10], "SAL"[NUMBER,22],"DEPTNO"[NUMBER,22]2 - "EMP".ROWID[ROWID,10], "EMPNO"[NUMBER,22]46 rows selected.Elapsed: 00:00:00.0612:50:21 SCOTT@ prod>这种⽅法在 SQLPLUS中查看刚执⾏过的 SQLSQLSQL的执⾏计划。
使用Oracle执行计划分析SQL性能
使⽤Oracle执⾏计划分析SQL性能执⾏计划:⼀条查询语句在ORACLE中的执⾏过程或访问路径的描述。
即就是对⼀个查询任务,做出⼀份怎样去完成任务的详细⽅案。
如果要分析某条SQL的性能问题,通常我们要先看SQL的执⾏计划,看看SQL的每⼀步执⾏是否存在问题。
看懂执⾏计划也就成了SQL优化的先决条件。
通过执⾏计划定位性能问题,定位后就通过建⽴索引、修改sql等解决问题。
⼀、执⾏计划的查看1.1 设置autotraceautotrace命令如下序号命令解释1SET AUTOTRACE OFF此为默认值,即关闭Autotrace2SET AUTOTRACE ON EXPLAIN只显⽰执⾏计划3SET AUTOTRACE ON STATISTICS只显⽰执⾏的统计信息4SET AUTOTRACE ON包含2,3两项内容5SET AUTOTRACE TRACEONLY与ON相似,但不显⽰语句的执⾏结果1.2 使⽤SQL在执⾏的sql前⾯加上EXPLAIN PLAN FORSQL> EXPLAIN PLAN FOR SELECT*FROM EMP;已解释。
SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));或者:SQL>select*from table(dbms_xplan.display);1.3 使⽤PL/SQL Developer,Navicat, Toad等客户端⼯具⼆、如何读懂执⾏计划2.1执⾏顺序的原则执⾏顺序的原则是:由上⾄下,从右向左由上⾄下:在执⾏计划中⼀般含有多个节点,相同级别(或并列)的节点,靠上的优先执⾏,靠下的后执⾏从右向左:在某个节点下还存在多个⼦节点,先从最靠右的⼦节点开始执⾏。
⼀般按缩进长度来判断,缩进最⼤的最先执⾏,如果有2⾏缩进⼀样,那么就先执⾏上⾯的。
oracle sql执行计划解析
oracle sql执行计划解析在Oracle SQL中,执行计划是指数据库在执行查询时确定的操作顺序和方法。
通过解析执行计划,我们可以了解查询语句在数据库中的执行情况,从而进行性能优化和调优。
本文将对Oracle SQL执行计划进行解析,并解释各部分的含义。
执行计划通常以树状结构显示,包括多个步骤和子步骤。
其中,每个步骤表示一个数据库操作,如全表扫描、索引扫描或连接操作,而子步骤表示每个步骤的具体实现方式。
在执行计划中,每个步骤都有相应的成本和行数。
成本表示执行该步骤的开销,Oracle会根据成本选择最优的执行计划。
行数表示每个步骤返回的记录数,通过该值可以了解数据量的大小。
常见的执行计划操作包括:1. 全表扫描:遍历整个表,适用于查询需要扫描大部分或全部数据的情况。
如果全表扫描的行数较大,可能需要考虑添加索引或进行其他优化。
2. 索引扫描:使用索引进行查询,避免全表扫描。
索引的选择对查询性能至关重要,需要确保索引的正确创建和维护。
3. 连接操作:将多个表连接起来,通常通过嵌套循环连接或哈希连接实现。
连接操作的成本较高,特别是在大数据量情况下,需要优化连接的顺序和方式。
4. 排序操作:对结果进行排序,根据ORDER BY子句的要求执行。
排序可能需要大量的CPU和I/O资源,尤其是在大数据量或复杂查询的情况下。
5. 分组操作:根据GROUP BY子句对结果进行分组,并计算每个组的聚合值。
分组操作需要对数据进行排序,因此会产生一定的开销。
通过解析执行计划,我们可以分析查询的性能瓶颈,并根据需要进行调整。
例如,可以通过创建索引来改善查询性能,或者对复杂查询进行优化,减少不必要的操作和数据传输。
总之,执行计划是优化和调优Oracle SQL查询的重要工具。
通过仔细解析执行计划,我们可以确定查询的执行顺序和方法,并针对性地进行优化,以提高查询性能。
执行计划的查看和分析
执行计划的查看和分析1. 如何获得执行计划要为一个语句生成执行计划,可以有3种方法:1.1. autotraceSql> set autotrace onSql> select * from dual;执行完语句后,会显示explain plan 与统计信息。
这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。
如果不想执行语句而只是想得到执行计划可以采用:Sql> set autotrace traceonly这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。
虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:(1)在要分析的用户下:Sqlplus > @ ?\rdbms\admin\utlxplan.sql(2) 用sys用户登陆Sqlplus > @ ?\sqlplus\admin\plustrce.sqlSqlplus > grant plustrace to user_name; - - user_name是上面所说的分析用户1.2. explain plan(1) sqlplus > @ ?\rdbms\admin\utlxplan.sql(2) sqlplus > explain plan set statement_id =’???’ for select ………………注意,用此方法时,并不执行sql语句,所以只会列出执行计划,不会列出统计信息,并且执行计划只存在plan_table中。
所以该语句比起set autotrace traceonly可用性要差。
需要用下面的命令格式化输出,所以这种方式我用的不多:set linesize 150set pagesize 500col PLANLINE for a120SELECT EXECORD EXEC_ORDER, PLANLINEFROM (SELECT PLANLINE, ROWNUM EXECORD, ID, RIDFROM (SELECT PLANLINE, ID, RID, LEVFROM (SELECT lpad(' ',2*(LEVEL),rpad(' ',80,' '))||OPERATION||' '|| -- OperationDECODE(OPTIONS,NULL,'','('||OPTIONS || ') ')|| -- OptionsDECODE(OBJECT_OWNER,null,'','OF '''|| OBJECT_OWNER||'.')|| -- OwnerDECODE(OBJECT_NAME,null,'',OBJECT_NAME|| ''' ')|| -- Object NameDECODE(OBJECT_TYPE,null,'','('||OBJECT_TYPE|| ') ')|| -- Object TypeDECODE(ID,0,'OPT_MODE:')|| -- OptimizerDECODE(OPTIMIZER,null,'','ANALYZED','', OPTIMIZER)||DECODE(NVL(COST,0)+NVL(CARDINALITY,0)+NVL(BYTES,0),0,null,' (COST='||TO_CHAR(COST)||',CARD='||TO_CHAR(CARDINALITY)||',BYTES='||TO_CHAR(BYTES)||')')PLANLINE, ID, LEVEL LEV,(SELECT MAX(ID)FROM PLAN_TABLE PL2CONNECT BY PRIOR ID = PARENT_IDAND PRIOR STATEMENT_ID = STATEMENT_IDSTART WITH ID = PL1.IDAND STATEMENT_ID = PL1.STATEMENT_ID) RIDFROM PLAN_TABLE PL1CONNECT BY PRIOR ID = PARENT_IDAND PRIOR STATEMENT_ID = STATEMENT_IDSTART WITH ID = 0AND STATEMENT_ID = 'aaa')ORDER BY RID, -LEV))ORDER BY ID;上面这2种方法只能为在本会话中正在运行的语句产生执行计划,即我们需要已经知道了哪条语句运行的效率很差,我们是有目的只对这条SQL语句去优化。
plsql查看执行计划
plsql查看执行计划PL/SQL是一种结构化查询语言,它是Oracle数据库的一部分,用于编写存储过程、函数、触发器等数据库对象。
在编写PL/SQL代码时,我们经常需要查看执行计划来优化查询性能。
执行计划是Oracle数据库优化器生成的一种执行计划,它显示了数据库引擎执行SQL语句时使用的操作顺序和访问方法。
通过查看执行计划,我们可以了解数据库引擎是如何执行我们的SQL语句的,从而找到优化查询性能的方法。
要查看PL/SQL执行计划,我们可以使用Oracle数据库提供的一些工具和命令。
下面我将介绍一些常用的方法和工具。
首先,我们可以使用SQLPlus工具来查看PL/SQL执行计划。
SQLPlus是Oracle数据库提供的一个命令行工具,我们可以通过它连接到数据库并执行SQL语句。
要查看执行计划,我们可以在SQLPlus中执行以下命令:```sql。
EXPLAIN PLAN FOR。
SELECT FROM your_table;```。
上面的命令会生成一个执行计划并将其存储在数据库中。
我们可以使用以下命令来查看执行计划:```sql。
SELECT FROM TABLE(DBMS_XPLAN.DISPLAY);```。
这将显示刚刚生成的执行计划。
执行计划中包含了查询语句的执行顺序、访问方法、操作类型等信息,我们可以根据这些信息来优化查询性能。
除了SQLPlus,我们还可以使用SQL Developer工具来查看执行计划。
SQL Developer是Oracle提供的一个图形化的数据库开发工具,它集成了很多数据库管理和开发功能。
在SQL Developer中,我们可以通过以下步骤来查看执行计划:1. 打开SQL Developer,并连接到数据库。
2. 在SQL Worksheet中输入要查询的SQL语句。
3. 点击工具栏上的“Explain Plan”按钮,SQL Developer会生成执行计划并显示在一个新的窗口中。
怎样看oracle查询语句执行计划?数据库教程-电脑资料
怎样看oracle查询语句执行计划?数据库教程-电脑资料
oracle|语句|执行
SQLPLUS的AutoTrace是分析SQL的执行计划,执行效率的一个非常简单方便的工具,在绝大多数情况下,也是非常有用的工具,。
1。
如何设置和使用AUTOTRACE
SQL> connect / as sysdba
SQL> @?/rdbms/admin/utlxplan.sql
Table created.
SQL> create public synonym plan_table for plan_table;
Synonym created.
SQL> grant select,update,insert,delete on plan_table to public;
Grant succeeded.
SQL> @?/sqlplus/admin/plustrce.sql
SQL>grant plustrace to public.
2. 理解和使用AutoTrace
对于SQL 调整,使用Autotrace是最简单的方法了,我们只需要做:
SQL>SET AUTOTRACE ON
我们就可以看到我们SQL的执行计划,执行成本(PHYSICAL READ/CONSISTENT READ...)
加上SET Timing On或者Set Time On,我们可以得到很多我们需要的数据,
电脑资料
《怎样看oracle查询语句执行计划?数据库教程》(https://www.)。
然后在toad里面对某一条sql语句按下Ctrl+e就可以看到这条语句的执行计划了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sqlplus中查看执行计划分析
对于oracle9i,需要手工设置plustrace角色,步骤如下:
1、在SQL>connect sys/密码as sysdba (密码为:数据库所在的那台服务器的密码)
在sys用户下运行$ORACLE_HOME/sqlplus/admin/plustrce.sql
SQL>@$ORACLE_HOME/sqlplus/admin/plustrce.sql
这段sql的实际内容如下:
set echo on
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat to plustrace;
grant plustrace to dba with admin option;
set echo off
以上产生plustrace角色
2、在sys用户下把此角色赋予一般用户
SQL> grant PLUSTRACE to 用户名; (用户名为:当前你登陆数据库的用户名,如:bbass)
3、然后在当前用户下运行$ORACLE_HOME/rdbms/admin/utlxplan.sql
SQL>@$ORACLE_HOME/rdbms/admin/utlxplan.sql 它会创建一个plan_table,用来存储分析SQL语句的结果。
4、SQL> set timing on
可查看SQL语句执行的用时
SQL> set autotrace on;
可查看SQL执行计划分析。
关于Autotrace几个常用选项的说明:
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
5,关闭以上功能,在SQL/PLUS的窗口运行以下命令
set time off; (说明:关闭时间显示)
set autotrace off;。