zoukankan      html  css  js  c++  java
  • Oracle Explain Plan,hint解释与示例

    Oracle 专业dba博客:http://blog.csdn.net/tianlesoftware

    Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式。

    因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Oracle提供给DBA用来分析问题的工具 。在SQL代码中使用Hint,可能导致非常严重的后果,因为数据库的数据是变化的,在某一时刻使用这个执行计划是最优的,在另一个时刻,却可能很差,这也是CBO 取代RBO的原因之一,规则是死的,而数据是时刻变化的,为了获得最正确的执行计划,只有知道表中数据的实际情况,通过计算各种执行计划的成本,则其最优,才是最科学的,这也是CBO的工作机制。 在SQL代码中加入Hint,特别是性能相关的Hint是很危险的做法。

    参考:Oracle Hint

    hint格式:/*+        */

    FULL Hint

    该Hint告诉优化器对指定的表通过全表扫描的方式访问数据。

    示例:

             SQL> select /*+full(dave) */ * from dave;

    要注意,如果表有别名,在hint里也要用别名, 这点在前面已经说明。

    Explain Plan执行计划是用于查看sql每个执行步骤情况信息的一个优化工具系列之一。

    如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题。 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以断定是执行计划出了问题。

    看懂执行计划也就成了SQL优化的先决条件。 这里的SQL优化指的是SQL性能问题的定位,定位后就可以解决问题。

    参考:Oracle 执行计划(Explain Plan) 说明

    使用SQL

    SQL>EXPLAIN PLAN FOR sql语句;

    SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));

    示例:

    SQL> EXPLAIN PLAN FOR SELECT * FROM DAVE;

    已解释。

    SQL> SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));

    或者:

    SQL>  select * from table(dbms_xplan.display);

    关于Oracle优化器,参考:

             Oracle Optimizer CBO RBO

    http://blog.csdn.net/tianlesoftware/archive/2010/08/19/5824886.aspx

  • 相关阅读:
    Vue常见问题总结
    vue学习记录
    内卷
    at least once 和 at most once 问题
    IO学习笔记(全)
    IO学习笔记7
    IO学习笔记6
    IO学习笔记5
    IO学习笔记4
    IO学习笔记3
  • 原文地址:https://www.cnblogs.com/svennee/p/4165331.html
Copyright © 2011-2022 走看看