Oracle执行计划
建立与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执行计划的更多相关文章
- Oracle执行计划详解
Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: ...
- 【转】Oracle执行计划解释
Oracle执行计划解释 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...
- 看懂Oracle执行计划
最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...
- oracle 执行计划详解
简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 ...
- 从Count看Oracle执行计划的选择
一. 前言 在调查一个性能问题的时候,一个同事问道,为什么数据库有些时候这么不聪明,明明表上有索引,但是在执行一个简单的count的时候居然全表扫描了!难道不知道走索引更快么? 试图从最简单的coun ...
- 查看Oracle执行计划的几种方法
查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...
- [转]Oracle执行计划详解
Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: ...
- 【Oracle】【9】阅读oracle执行计划
正文: 工具:PLSQL 1,配置执行计划需要显示的项 工具→首选项→窗口类型→计划窗口→根据需要配置要显示在执行计划中的列 2,打开执行计划 在SQL窗口执行完一条select语句后按 F5 即可查 ...
- 【摘】Oracle执行计划不走索引的原因总结
感谢原博主 http://soft.chinabyte.com/database/364/12471864.shtml 在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的 ...
- Oracle执行计划 explain plan
Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...
随机推荐
- 常用js函数整理--common.js
var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data: data, dataType: 'json ...
- .pdb文件的使用方法
1.Demo1:用DLL_01生成my.dll.my.pdb.my.lib文件. 2.Demo2:在DLL_01_APP_02中使用DLL_01的dll. 步骤: 1.vs2008打开DLL_01_A ...
- 手写代码自动实现自动布局,即Auto Layout的使用
手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...
- DB2 嵌入式应用中定义游标(开放平台上)
DECLARE CURSOR statement The DECLARE CURSOR statement defines a cursor. Invocation Although an inter ...
- rpm -qc 来查找安装包的配置文件
rpm -qc elasticsearch /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/jvm.options /etc/elast ...
- MySQL应用的异常记录
>>Error Code: 1045. Access denied for user 'test'@'%' (using password: YES) 使用MySQL的select * i ...
- 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)
1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...
- java中常用的工具类(一)
我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...
- Tiny Rss Reader - 迷你RSS阅读器
发布新软件 TinyRss: Windows平台上的一个小巧的Rss阅读器. 用户界面: 项目地址: https://github.com/movsb/tinyrss.git 测试下载: http:/ ...
- Excel数据挖掘插件
Excel是大家非常熟悉的表格工具,借助它可以实现日程工作中最原始的数据处理的基本的功能,此外通过 SQL Server插件的支持,我们也可以在Excel中实现数据挖掘的功能. 此篇将先介绍Excel ...