建立与oracle的web程序,经常性出现sql性能不高导致的问题,比如程序好好的突然数据库查询变得很慢,几乎加载不了,这时候就有可能是oracle查询计划出错的原因。

 <sql id="queryCalendarBySeqnos">

        SELECT * FROM(
select /*+ leading(ii) index(ii CALENDAR_INVITE_IDX1) */ ii.RECMYSMS,ii.RECMYEMAIL,ii.RECMOBILE,ii.RECEMAIL,ii.enable,ii.status,
case(ii.inviteauth) when -1 then 0 else 1 end as isInvitedCalendar,
0 as isSharedCalendar,
0 as isSubCalendar,
nvl(l.labelname,sl.labelname) as labelname,
nvl(l.color,sl.color) as color,
nvl(l.gid,sl.gid) as lableGid,
i.createtime,
<include refid="calendarInfoColumnNamesForSelf"/>
FROM calendar_info i, calendar_invite_info ii,
calendar_label l,calendar_sys_label sl
WHERE
i.seqno = ii.calseqno
and i.labelid = l.seqno(+)
and i.labelid = sl.seqno(+)
AND ii.inviteruin = #uin#
and i.isdelflag = 0
and ii.isdelflag = 0
<![CDATA[
AND ii.status <> 2
]]>
AND i.seqno in
<iterate property="gids" open="(" close=")" conjunction=",">
#gids[]#
</iterate> UNION ALL select /*+ leading(ls) index(ls CALENDAR_LABEL_SHARE_IDX2) */ 0 as RECMYSMS,0 as RECMYEMAIL,'' as RECMOBILE,'' as RECEMAIL,0 as enable,1,
0 as isInvitedCalendar,
1 as isSharedCalendar,
0 as isSubCalendar,
l.labelname,ls.color,
l.gid as lableGid,
i.createtime,
<include refid="calendarInfoColumnNames"/>
from calendar_info i, calendar_label_share_info ls,
calendar_label l
<![CDATA[
where
i.labelid = ls.labelid
and i.labelid = l.seqno
and ls.sharetype <> -1
and ls.shareuin = #uin#
and ls.status = 1
and i.isdelflag = 0 ]]>
AND i.seqno in
<iterate property="gids" open="(" close=")" conjunction=",">
#gids[]#
</iterate> UNION ALL select /*+ leading(cs) index(cs UNI_CALENDAR_SUBSCRIPTION) */ 0 as RECMYSMS,0 as RECMYEMAIL,'' as RECMOBILE,'' as RECEMAIL,0 as enable,1,
0 as isInvitedCalendar,
0 as isSharedCalendar,m
1 as isSubCalendar,
l.labelname,cs.color,
l.gid as lableGid,
i.createtime,
<include refid="calendarInfoColumnNames"/>
from calendar_info i, calendar_subscription cs,
calendar_label l
<![CDATA[
where
i.labelid = cs.labelid
and i.labelid = l.seqno
and cs.uin=#uin#
and l.isPublic=1
and i.isdelflag = 0
]]>
AND i.seqno in
<iterate property="gids" open="(" close=")" conjunction=",">
#gids[]#
</iterate>
)
</sql>

如上图的代码,就出现了问题。

所以学一下oracle的查询计划吧。

1、设置oracle查询计划,如下步骤:

2、在sql-plus查询sql的执行计划,如图:

SQL> explain plan for select count(*) from   calendar01.calendar_label@to_calendar.LOCALDOMAIN  where    istodoemail =1  and color <>'#f2b73a';

Explained

SQL>
SQL>
SQL>
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 4083529702
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| T
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT REMOTE| | 1 | 21 | 6 (0)| 0
| 1 | SORT AGGREGATE | | 1 | 21 | |
|* 2 | TABLE ACCESS FULL | CALENDAR_LABEL | 12 | 252 | 6 (0)| 0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("A1"."ISTODOEMAIL"=1 AND "A1"."COLOR"<>'#f2b73a')
Note
-----
- fully remote statement 18 rows selected SQL>

我们需要掌握它的执行先后顺序和每个字段代表的含义。

 执行计划的执行顺序为: 
先从计划开头一直往右看,直到最右边并列的代码部分,如果见到并列的,就从上往下看,对于并列的步骤,靠上的先执行,对于不并列的步骤,靠右的先执行
 

中文参照:http://www.cnblogs.com/kerrycode/archive/2012/05/24/2517210.html

英文参照:http://perumal.org/how-to-read-an-oracle-sql-execution-plan/

Oracle执行计划的更多相关文章

  1. Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  2. 【转】Oracle执行计划解释

    Oracle执行计划解释 一.相关的概念     Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...

  3. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  4. oracle 执行计划详解

    简介:     本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容.     并有总结和概述,便于理解与记忆! +++ 目录 ---     一.相关的概念    ...

  5. 从Count看Oracle执行计划的选择

    一. 前言 在调查一个性能问题的时候,一个同事问道,为什么数据库有些时候这么不聪明,明明表上有索引,但是在执行一个简单的count的时候居然全表扫描了!难道不知道走索引更快么? 试图从最简单的coun ...

  6. 查看Oracle执行计划的几种方法

    查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...

  7. [转]Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  8. 【Oracle】【9】阅读oracle执行计划

    正文: 工具:PLSQL 1,配置执行计划需要显示的项 工具→首选项→窗口类型→计划窗口→根据需要配置要显示在执行计划中的列 2,打开执行计划 在SQL窗口执行完一条select语句后按 F5 即可查 ...

  9. 【摘】Oracle执行计划不走索引的原因总结

    感谢原博主 http://soft.chinabyte.com/database/364/12471864.shtml 在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的 ...

  10. Oracle执行计划 explain plan

    Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...

随机推荐

  1. 55. Jump Game leetcode

    55. Jump Game Total Accepted: 95819 Total Submissions: 330538 Difficulty: Medium Given an array of n ...

  2. Android手绘效果实现

    效果图 原理 大概介绍一下实现原理.首先你得有一张图(废话~),接下来就是把这张图的轮廓提取出来,轮廓提取算法有很多,本人不是搞图像处理的,对图像处理感兴趣的童鞋可以查看相关资料.如果你有好的轮廓提取 ...

  3. EF – 3.EF数据查询基础(下)数据关联

    5.5.1 <关于“数据关联”,你不一定清楚的事> 这讲视频比较全面地介绍了“一对一”.“一对多”和“多对多”三种数据关联类型在关系数据库和Entity Framework数据模型中的实现 ...

  4. Avalon学习

    1.认识AvalonAvalon是一个简单易用的迷你的MVVM框架,作者是博客园的司徒正美,去哪儿.搜狐等等都用这个框架.没有任何依赖,兼容性非常好,支持IE6,不到5000行,压缩后不到50KB.官 ...

  5. WCF分布式开发必备知识(1):MSMQ消息队列

    本章我们来了解下MSMQ的基本概念和开发过程.MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一 ...

  6. HDU3434 Sequence Adjustment

    题意:给你含有n个数的序列,每次你可以选一个子序列将上面所有的数字加1或者减1,目标是把所有数字变成相同的,问最少步数,和那个相同的数字有多少种可能. 将原序列转化为差分序列,即a[2] - a[1] ...

  7. ZLL主机接口的信息处理流程

    主机接口的信息处理流程 在我们翻译的文档中是用电脑端来模拟主机的,电脑代替网关发送主机接口命令的环节是在zll_controller.c中实现的,(在下载的文件中已经提供了其对应的可执行文件zllCm ...

  8. JavaScript中call,apply和prototype

    [TOC] call()方法 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 如果没有提供 thi ...

  9. HorizontalScrollView

    HorizontalScrollView 链接

  10. unfortunately launcher has stopped

    设定虚拟机的配置.