oracle for循环_浅谈Oracle的执行计划

执行计划执行计划是一条sql语句在ORACLE中的执行过程或访问路径的描述。即对一个sql语句,从执行计划可以看出oracle完成任务的详细方案。如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题。 看懂执行计划也就成了SQL优化的先决条件。 通过执行计划定位性能问题,定位后就通过建立索引、修改sql等解决问题。相关概念-单表访问路径

  • TABLE ACESS FULL 全表扫描:没有建索引或者没有走上索引, 在较大的表上非常容易出现性能问题,应该尽量避免。
  • index range scan 索引范围扫描 :走非唯一索引,或者是唯一索引使用了range操作(< > between等)
  • index unique scan 索引唯一扫描:可以定位到单个ROWID。如果存在UNIQUE 或PRIMARY KEY 约束,就可以走索引唯一扫描
  • index skip scan 索引跳跃扫描 :往往是走组合索引,但where条件中没有包括组合索引中所有的列
  • index full scan 索引全扫描
  • index fast full scan 索引快速全扫描

相关概念-表的连接方式

  • nestLoop 嵌套连接:可以理解成两个嵌套的for循环,嵌套连接适合于返回少量数据,并且内部表关联字段上存在索引,外部表很小或者走索引后返回很少数据。成本约等于N次索引(N为外部表返回的记录数)
  • hash join:
    总成本为两张表单表访问路径的总成本!即使不存在索引,也就是两张表的全扫,与记录数无关。因此Hash连接适合返回大量数据,不要求表关联字段存在索引,Hash连接用在返回少量数据上很吃亏

执行计划的解读

  • 对同一凹层,先上后下执行
  • 对不同凹层,先里后外执行
oracle for循环_浅谈Oracle的执行计划_第1张图片

如何查看sql语句的执行计划

  • 直接解析SQL语句.
    Explain plan for XXX;
    Select * from table(dbms_xplan.display);
  • 根据SQL_ID查询,
    select * from table
    (dbms_xplan.display_cursor('&sql_id',0,
    'allstats last'));
  • 从视图v$sql_plan 中获取。
  • sqplus中可以使用set autotrace on,自动获取执行计划和统计信息

你可能感兴趣的:(oracle,for循环,oracle,不等于,oracle,强制走索引,oracle,循环查询,oracle,执行计划,oracle,视图,索引)