Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1417877
  • 博文数量: 239
  • 博客积分: 5909
  • 博客等级: 大校
  • 技术积分: 2715
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-24 20:19
文章分类

全部博文(239)

文章存档

2014年(4)

2013年(22)

2012年(140)

2011年(14)

2010年(59)

我的朋友

分类: Oracle

2012-05-04 00:17:18

获取执行计划的方法
1. explain plan for
首先执行explain plan for [目标sql语句], 取得计划解释; 然后通过DBMS_XPLAN.DISPLAY方法生成计划详情输出:
explain plan for select count(*) from table;
select * from table(DBMS_XPLAN.DISPLAY);
select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'));

2. set autotrace on

注意:

     如果PLAN_TABLE表不存在:

     执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。

     如果PLUSTRACE角色不存在,

     执行$ORACLE_HOME/sqlplus/admin/plustrce.sql


执行set autotrace on; 生成AUTOTRACE 报告; 然后执行[目标sql语句],当完成后会把结果及执行计划、统计信息等自动显示出来。

   

关于Autotrace几个常用选项附加说明:

      1、SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式

      2、SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告

      3、SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息

      4、SET AUTOTRACE ON ----------------- 包含执行计划和统计信息

      5、SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询

3. dbms_system存储过程生成执行计划


优化提示

Oracle的优化器有三种: COST, RULE, CHOOSE

两种访问表中数据的方式: 全表扫描, 通过ROWID访问

1. where语句的连接顺序: 自下至上解析, 表之间的连接写在其它where语句前面, 过滤最大数量的语句写在最后

2. 减少访问数据库的次数

3. 使用DECODE函数避免重复扫描相同记录和重复连接相同的表

4. 使用TRUNCATE代替DELETE, TRUNCATE只能删除全表, 属于DDL

5. 尽量多使用COMMIT 释放资源

6. 使用WHERE代替HAVING

7. 减少对表的查询

阅读(763) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~