`

Oracle Explain plan 使用总结(转)

阅读更多
Oracle Explain plan使用总结

   写多了SQL语句,伴随着数据量的海增,总会遇到性能的问题。在Oracle领域一个不好的习惯,一旦遇到性能问题就推给DBA来做。长期如此,反而对DBA的工作感到神秘。至少笔者所在单位就是如此,DBA向来是牛气冲天的。
   要调整SQL语句的性能,就得知道这条SQL语句花费了多少COST。Explain plan工具可帮我们分析这些工作。而调整SQL语句的性能,肯定要涉及索引了。Oracle索引比较常用的有二种,1.B-TREE索引,B-TREE 适用于值变化较多的列,2.BITMAP索引。BITMAP适用于值变化较少的列(少于300个值),比如:性别这样的列。
    有了上述基础就可以开始优化工作了。工具:pl/sql developer。

1.建表
create table HEK_TEST_IN 
( 
  PID   INTEGER primary key, 
  NDATE DATE, 
  NNOTE VARCHAR2(50) 
) 
create table HEK_TEST_INDETAIL 
( 
  PID   INTEGER not null, 
  FID   INTEGER, 
  NNAME VARCHAR2(50), 
  NQTY  FLOAT, 
  NNOTE VARCHAR2(50), 
  NSIZE VARCHAR2(20) 
); 
alter table HEK_TEST_INDETAIL 
  add constraint FK_TEST_1 foreign key (FID) 
  references HEK_TEST_IN (PID); 
create index HEK_TEST_INDETAIL_INDEX on HEK_TEST_INDETAIL (NNAME, NSIZE); 


2.测试具体SQL语句到底有没有使用index。
  2.1条件查询:
      select *  from hek_test_in where pid=3
  Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE                  
TABLE ACCESS BY INDEX ROWID    Object owner=APPS    Object name=HEK_TEST_IN        
  INDEX UNIQUE SCAN    Object owner=APPS    Object name=SYS_C00211467 

分析得出:hek_test_in查询时使用索引扫描,为什么呢?因为我们创建表时,指定Primary Key时,Oracel会自动创建一个UNIQUE INDEX。       
-------------------------------------------------------------------------------

  2.2连接查询:
      select * from hek_test_in a,hek_test_indetail b where a.pid=b.fid;
  Explain Paln输出;
  SELECT STATEMENT, GOAL = CHOOSE                  
   NESTED LOOPS                  
  TABLE ACCESS FULL    Object owner=APPS    Object name=HEK_TEST_INDETAIL          
  TABLE ACCESS BY INDEX ROWID    Object owner=APPS    Object name=HEK_TEST_IN       
   INDEX UNIQUE SCAN    Object owner=APPS    Object name=SYS_C00211467   
  分析得出:hek_test_in查询时使用索引扫描,而HEK_TEST_INDETAIL使用全表扫描。    
-----------------------------------------------------------------------------
   2.3组合索引的条件查询:
      select *  from hek_test_indetail where nname = ''
   Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE                  
TABLE ACCESS BY INDEX ROWID    Object owner=APPS    Object name=HEK_TEST_INDETAIL  
  INDEX RANGE SCAN    Object owner=APPS    Object name=HEK_TEST_INDETAIL_INDEX   
分析得出:查询时使用组合索引扫描。注:组合索引跟创建的列顺序有关,如果条件语句换成where nsize='',也会导至全表扫描。
-------------------------------------------  
  2.4组合索引的排序查询:
      select *  from hek_test_indetail order by nname
   Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE                  
SORT ORDER BY                  
  TABLE ACCESS FULL    Object owner=APPS    Object name=HEK_TEST_INDETAIL          
分析得出:排序查询时无法使用组合索引,从而导致全表扫描。

  2.5 基于NULL条件查询:
   select *  from hek_test_indetail where nname is null
   Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE                  
TABLE ACCESS FULL    Object owner=APPS    Object name=HEK_TEST_INDETAIL          
分析得出:NULL查询导致全表扫描。与此类似的还有is not null,<>也会导至全表扫描。


作者:Jarwang

分享到:
评论

相关推荐

    ORACLE EXPLAIN PLAN的总结

    NULL 博文链接:https://babydeed.iteye.com/blog/1567772

    oracle explain plan总结

    oracle执行计划,oracle explain plan,在ORACLE数据库中,需要对SQL语句进行优化的话需要知道其执行计划,从而针对性的进行调整.ORACLE的执行计划的获得有几种方法,下面就来总结下

    Oracle中explain_plan的用法

    详细讲解在Oracle中如何使用explain_plan,值得参考和收藏学习。

    数据库调优:ORACLE EXPLAIN PLAN的总结

    NULL 博文链接:https://qidaoxp.iteye.com/blog/758552

    Oracle中EXPLAIN PLAN的使用技巧

    Oracle中EXPLAIN PLAN的使用技巧

    oracle explain plan

    详细介绍了oracle解释计划的原理,对理解oracle解释计划非常有用。

    oracle 语句

    explain plan for select ename,job,sal,comm from empcon where (sal-700);--已解释 desc plan_table; col id for 999 col operation for a16 col option for a16 col object_name for a16 Select id,operation,...

    ORACLE重建索引总结

    SQL&gt; explain plan for alter index idx_policy_id2 rebuild online; Explained SQL&gt; select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT -----------------------------------------------------...

    Oracle 执行计划

    Oracle 执行计划 explain sql execution plan

    ORACLE数据库DBA面试集锦

     explain plan set statement_id = &item_id for &sql;  select * from table(dbms_xplan.display); explain plan set statement_id= '测试一 ' for select (这里可以是很复杂的查询) 执行. 然后select * ...

    最完整的Toad For Oracle使用手册

    Explain Plan 503 Pinned Code 504 Repair Chained Rows 505 Rebuild Table 506 Unix Kernel Parms 507 Windows Registry Parms 508 Analyze All Objects 509 Profilers 512 Oracle Tuning 523 Rebuild Multiple ...

    Oracle SQL Handler (Oracle客户端工具) V3.1

    &lt;7&gt; 运行命令 "explain plan for SQL" 或按菜单项 "Explain Plan",能快速地显示 SQL 的执行计划; "Export" 按钮或菜单项,能直接将 SELECT 语句结果转化为 INSERT 语句,方便于数据移植、备份等 &lt;8&gt; 运行命令...

    Oracle性能优化方法(SQL篇)

    1.如何分析SQL语句 2.选用适合的ORACLE优化器 3.用EXPLAIN PLAN 分析SQL语句 4.使用TKPROF 工具来查询SQL性能状态 5.表分区的应用

    oracle performance tuning

    query processing,Explain plan,autotrace

    oracle执行计划文档

    explain plan非常令人难解,初学者看看很好,有助于搞清楚最基本的概念

    ORACLE SQL性能优化系列(全)

    非常全面的ORACLE SQL性能优化介绍及实例:优化器的选择、共享SQL语句、访问Table的方式、减少访问数据库的次数、使用DECODE函数、减少对表的查询、通过内部函数提高SQL效率、用NOT EXISTS替代NOT IN、使用EXPLAIN ...

    DBA笔试题.wps

    这篇文档整合了热门的oracle DBA面试问题 一. SQL tuning 类  1:列举几种表连接方式  hash join/merge join/nest loop(cluster join)/index join  2:不借助第三方工具,怎样查看sql的执行计划  set autot ...

    Oracle中获取执行计划的几种方法分析

    1. 预估执行计划 – Explain PlanExplain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。 首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划...

    ORACLE9i_优化设计与系统调整

    §12.8.5 解释计划(Explain Plan)策略 156 §12.8.6 AUTOTRACE 实用程序 157 第13章 数据访问方法 160 §13.1 使用索引的访问方法 161 §13.1.1 何时创建索引 161 §13.1.2 索引列和表达式的选择 161 §13.1.3 选择...

    Oracle面试题 oracle学习题

    截取部分题目如下,有答案: 1. 解释冷备份和热备份的不同点以及各自的优点 2. 你必须利用备份恢复数据库,但是你没有...17. 如何生成explain plan? 18. 如何增加buffer cache的命中率? 19. ORA-01555的应对方法?

Global site tag (gtag.js) - Google Analytics