`
angel_888
  • 浏览: 171982 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

新学的,使用执行计划

阅读更多
对于sql执行的小量高低.我们可以通过执行计划的信息基本上可以进行分析查看该SQL语句执行的时间.连接顺序及浪费的数据库资源等信息,从而判断该SQL语句执行的效率如何,下面就简单的介绍一下执行计划的使用
2.        Explain使用
Oracle RDBMS执行每一条SQL语句,都必须经过Oracle优化器的评估。所 以,了解优化器是如何选择(搜索)路径以及索引是如何被使用的,对优化SQL语句有很大的帮助。Explain可以用来迅速方便地查出对于给定SQL语句中的查询数据是如何得到的即搜索路径(我们通常称为Access Path)。从而使我们选择最优的查询方式达到最大的优化效果。
2.1.        安装
要使用执行计划首先需要执行相应的脚本。
使用Explain工具需要创建Explain_plan表,这必须先进入相关应用表、视图和索引的所有者的帐户内。Oracle的介质中包含有执行此项工作的SQL源程序,例如:
ORA_RDBMS: XPLAINPL.SQL (VMS)
$ORACLE_HOME/rdbms/admin/utlxplan.sql (UNIX)
该脚本后会生成一个表这个程序会创建一个名为plan_table的表,表结构如下:
我们简单的介绍一下主要的字段含义:
字段名        字段类型        含义
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        根据基于开销的方法对操作所访问字节的估计

2.2.        使用
2.2.1.        常规使用
常规使用语法:
explain PLAN [ SET STATEMENT_ID [=] < string literal > ]
[ INTO < table_name > ]
FOR < sql_statement >
其中:
STATEMENT_ID是一个唯一的字符串,把当前执行计划与存储在同一PLAN表中的其它执行计划区别开来。
TABLE_NAME是plan表名,它结构如前所示,你可以任意设定这个名称。
SQL_STATEMENT是真正的SQL语句。
如:
SQL> explain plan set statement_id='test1' for  
  2     SELECT a.soctermbegin,
  3            a.soctermend,
  4            a.dealserialno,
  5            a.levydataid,
  6            a.dealtotal,
  7            e.categoryitemcode,
  8            row_number() over(PARTITION BY a.levydataid ORDER BY 1) AS theRow
  9       FROM tb_soc_packdealdata   a,
10            tb_Lvy_TaxDataBillMap c,
11            Tb_lvy_BillData       d,
12            tb_soc_levydetaildata e
13      WHERE a.levydataid = c.datafrompointer(+)
14        AND c.billdataid = d.billdataid(+)
15        AND a.levydataid = e.levydataid
16        AND a.packdealstatuscode = '10'
17        AND (a.datastatus <> '9' OR a.datastatus is NULL)
18        AND (d.billstatus IS NULL OR
19            (d.billstatus <> '2' AND d.billstatus <> '8'))
20        AND a.Insurcode = '6010952'
21  ;
Explained
执行下面语句就可以查看该语句执行的执行计划:
SQL> SELECT A.OPERATION,OPTIONS,OBJECT_NAME,OBJECT_TYPE,ID,PARENT_ID
  2  FROM PLAN_TABLE  a
  3  WHERE STATEMENT_ID='test1'
  4  ORDER BY Id;
OPERATION        OPTIONS        OBJECT_NAME                    OBJECT_TYPEID  PARENT_ID
---------------- --------------------------------------------- ------------- ----------
SELECT STATEMENT                                                           0
WINDOW           SORT                                                      1          0
FILTER                                                                     2          1
NESTED LOOPS     OUTER                                                     3          2
NESTED LOOPS     OUTER                                                     4          3
NESTED LOOPS                                                               5          4
TABLE ACCESS     FULL           TB_SOC_PACKDEALDATA                        6          5
TABLE ACCESS     BY INDEX ROWID TB_SOC_LEVYDETAILDATA                      7          5
INDEX            RANGE SCAN     IND_DATAID_LEVSOC              NON-UNIQUE  8          7
TABLE ACCESS     BY INDEX ROWID TB_LVY_TAXDATABILLMAP                      9          4
INDEX            RANGE SCAN     TBLVYTAXDATABIL_DATAFROMPOINTE NON-UNIQUE 10          9
TABLE ACCESS     BY INDEX ROWID TB_LVY_BILLDATA                           11          3
INDEX            UNIQUE SCAN    TBLVYBILLDATA_BILLDATAID       UNIQUE  
2.2.2.        自动显示使用
在SQLPLUS中自动跟踪显示执行计划及相关信息
SQL>set timing on  --显示执行时间
SQL>set autorace on �C显示执行计划
SQL>set autorace on �C显示执行计划
SQL>set autotrace traceonly �C只显示执行计划即不显示查询出来的数据
设置完毕后执行SQL语句就会显示执行计划信息及相应的统计信息(需要设置显示该选项)
SQL> select nvl(sum(t.taxdue), 0)
  2             from tb_lvy_sbzs100 t, tb_lvy_declaredoc a, tb_lvy_declaredoc b
  3            where a.dossiercode = 'SB02041108'
  4              and a.pages = 123
  5              and a.remarkid = b.remarkid
  6              AND A.REMARKID IS NOT NULL
  7              and b.declaredocid = t.declaredocid;
NVL(SUM(T.TAXDUE),0)
--------------------
                   0
已用时间:  00: 00: 04.07
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=1 Bytes=110)
   1    0   SORT (AGGREGATE)
   2    1     NESTED LOOPS (Cost=6 Card=1 Bytes=110)
   3    2       MERGE JOIN (CARTESIAN) (Cost=4 Card=1 Bytes=74)
   4    3         TABLE ACCESS (FULL) OF 'TB_LVY_SBZS100' (Cost=2 Card =1 Bytes=31)
   5    3         BUFFER (SORT) (Cost=2 Card=1 Bytes=43)
   6    5           TABLE ACCESS (FULL) OF 'TB_LVY_DECLAREDOC' (Cost=2 Card=1 Bytes=43)
   7    2       TABLE ACCESS (BY INDEX ROWID) OF 'TB_LVY_DECLAREDOC' (Cost=2 Card=1 Bytes=36)
   8    7         INDEX (UNIQUE SCAN) OF 'TBLVYDECLAREDOC_DECLAREDOCID' (UNIQUE)
Statistics
----------------------------------------------------------
          0  recursive calls --循环递归次数
          0  db block gets―请求的数据块在buffer能满足的个数
       6675  consistent gets --逻辑IO用于读表并计算行数, 数据请求总数在回滚段Buffer中
         45  physical reads �C从磁盘读到Buffer Cache数据块数量
          0  redo size �C产生的redo日志大小
        217  bytes sent via SQL*Net to client
        276  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed
SQL>
如果6675  consistent gets --逻辑IO用于读表并计算行数, 数据请求总数在回滚段Buffer中
45        physical reads �C从磁盘读到Buffer Cache数据块数量
的数值比较小则该语句对对数据库的性能比较高。

2.2.3.        PL/SQL和TOAD中使用
如果在PL/SQL中使用选择要查询语句显示执行计划,则只需要SQL WINDOWS 窗口里面输入要查询的SQL语句,然后选择按键F5或者在菜单TOOLS�D�D>Explain Plan 菜单按键就可以在执行计划窗口查看该语句的执行计划。
在TOAD语句中在执行当前的SQL窗口中选择下方的Explain PlanTAB页即可以查看要执行语句的执行计划信息。
2.3.        限制
虽然任何SQL语句都可以用explain解释,但对于没有查询的INSERT,UPDATE,DELETE操作来说,这个工具并没有太大的用处。没有子查询的INSERT操作不会创建执行计划,但没有WHERE子句或子查询的UPDATE和DELETE操作会创建执行计划,因为这些操作必须先找出所要的记录。
另外,如果你在SQL语句中使用其它类型如sequence等,explain也能揭示它的用法。
explain真正的唯一的限制是用户不能去解释其它用户的表,视图,索引或其它类型,用户必须是所有被解释事物的所有者,如果不是所有者而只有select权限,explain会返回一个错误。
分享到:
评论

相关推荐

    四则运算新手写的,检测新学知识

    例如,表达式2 + 3 * 4首先执行乘法,得到2 + 12,然后执行加法,最终结果为14。此外,除法需要注意整除和浮点除的区别,前者会丢弃小数部分,后者保留小数。 在"描述"中提到的"MyCalculate"可能是一个简单的程序,...

    新学JS练习

    控制流程语句如if...else、switch、for、while等用于决定程序执行的顺序。 接下来是函数,JS中的函数是第一类公民,可以作为变量赋值、作为参数传递、也可以作为返回值。理解函数表达式和函数声明的区别,以及作用...

    小升初备考应该如何制订学习计划doc.doc

    定期评估计划执行情况,检查学习任务完成度、计划执行程度、学习效果等。如发现问题,及时调整计划,确保计划持续适应个人需求和学习进展。 总的来说,小升初备考的学习计划应该是一个动态调整的过程,既要全面又...

    2022年小学生新学期学习计划[扫描版].pdf

    【标题】和【描述】提到的是一个针对小学生的...综上所述,这份小学生新学期学习计划注重平衡学术、兴趣、健康和个人发展,旨在通过有条理的规划,培养学生的自律性和解决问题的能力,促进他们在新学期中的全面发展。

    对于大学生组织部学年工作计划范本.pdf

    【大学生组织部学年工作计划】是大学组织部在新学年中为了规划和指导部门工作而制定的具体蓝图。这份工作计划旨在确保部门活动的有效执行,提升部门成员的工作能力,并促进整个组织的协调运作。 首先,工作计划强调...

    13374 培训行动计划表.doc

    - 培训后立即记录心得,可以帮助巩固新学知识,提炼关键信息,同时反思个人理解,促进知识内化。 5. **行动方案(计划)**: - 明确列出将在实际工作中实施的具体行动,如定期复习、参与实践项目、寻求导师指导等...

    学生数据库SQL版的 新学的可以DOWN后附加学习一下

    通过实践这些例子,你可以学习如何创建表、插入数据、执行查询、更新记录以及管理数据库结构。此外,可能还会有关于如何使用JOIN操作连接不同表以获取更复杂信息的示例,如查询选修同一门课的所有学生。 学习SQL...

    小班下学期保育员工作计划怎么写(精品)..doc

    【小班下学期保育员工作计划】是针对幼儿保健工作的一个重要文件,旨在确保幼儿在新学期中的安全、健康和全面发展。以下是该工作计划的主要知识点: 1. **指导思想**:以新《纲要》为指导,参照《武汉市托幼机构...

    高二暑假学习计划书.doc

    9. **个人计划执行**:暑假计划要注重持续性和灵活性。保持简单易行的日程,每天坚持完成即可。 10. **健康生活**:结合晨练、阅读、休息等活动,保证身心健康。例如,早上6:30起床,进行晨练;8:00-9:30早读,提升...

    艾宾浩斯曲线生成器

    这个理论指出,新学知识会随着时间的推移而逐渐遗忘,但通过在特定的时间点进行复习,可以有效地巩固记忆,提高学习效率。 艾宾浩斯曲线生成器的核心功能在于,它能根据用户设定的学习目标和时间安排,智能计算出...

    五年级新版牛津英语教学计划.doc

    【五年级新版牛津英语教学计划】着重关注的是如何有效地教授五年级学生使用新改版的牛津英语教材。这份教学计划旨在确保学生能够...教师在执行教学计划时,应灵活调整方法,以满足不同学生的学习需求,确保教学质量。

    策划的工作计划汇编9篇.docx

    在这个文档中,"策划的工作计划汇编9篇.docx" 提供了九个不同策划方案的详细内容,旨在帮助策划人员更好地执行他们的工作,并在新学年中学习和成长。\n\n在策划的工作方案中,首先强调了策划团队的主要职责。团队...

    学校教务处工作计划精选.doc

    【学校教务处工作计划精选】的...总结来说,这份工作计划详细列出了教务处在新学期中的各项任务和目标,旨在通过规范教学流程,优化教师队伍,提升教学质量,以达到促进学生全面发展,创建和谐高效的教育环境的目的。

    个人岗位计划与安排范文五篇.doc

    7. **过程性评价**:定期评估个人计划的执行情况,可以是每周或每月的自我评估,也可以是与上级的定期面谈。这有助于识别进展,及时调整计划,并激励持续改进。 8. **创建学习氛围**:鼓励团队中的开放学习和反馈...

    [学生会办公室工作计划]院团委办公室工作计划范文.docx

    综上所述,这份工作计划详细列出了学生会办公室在新学期中的工作重点和发展方向,不仅关注日常运营的细节管理,还强调了团队建设和活动策划的重要性。通过对这些关键知识点的理解与实践,可以有效提升办公室的工作...

    [学校秘书处工作计划范文3篇] 学校工作计划范文大全.doc

    【学校秘书处工作计划范文3篇】文档主要涵盖了学校...这些工作计划体现了学校秘书处和相关学生组织在新学期中的工作重点和策略,旨在提高团队效能,培养新人才,加强内部建设,以及提升整个学生会的服务质量和影响力。

    多媒体使用计划.doc

    在实际操作中,作为教师,需要【规范管理,加强基础工作】,如保持微机室整洁,维护设备,制定课程表,执行各项管理制度,并且不断提升自己的教科研能力,通过学习新技术和教学方法,以适应教育现代化的需求。...

    团委秘书处工作计划2.doc

    综上所述,该工作计划体现了秘书处在新学期中的工作重点,即通过自我提升、团队建设、制度完善和日常管理等多方面,提升整个团委的工作效能和团队凝聚力。这些措施的实施,将有利于形成一个高效、有纪律、服务意识强...

    康复保健协会学年工作计划.doc

    【康复保健协会学年工作计划】的文档是一个指导性文件,旨在规划和组织康复保健协会在新学年中的各项活动和工作。以下是该计划中涉及的主要知识点: 1. **新成员招募与安排**:协会计划根据自身需求制定招新计划,...

    保育老师开学工作计划 .doc

    【保育老师开学工作计划】 保育老师在开学之际需要制定详细的工作计划,以确保幼儿在新学期的健康成长和全面...通过科学合理的规划和执行工作计划,保育老师能够有效地促进幼儿全面发展,为他们的未来打下坚实基础。

Global site tag (gtag.js) - Google Analytics