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列的值.不过你可以像使用其它列那样 ...
随机推荐
- September 4th 2016 Week 37th Sunday
The morning crowned the humble cloud with splendor. 晨光为谦逊的白云披上壮丽的光彩. Humility is a virtue. Many famo ...
- 访问javaweb服务器sessionid存放问题
sessionid存放在cookies里面,key是JSESSIONID
- 昨晚值班将发dla的程序改好后放入正式环境
可是在修改的topic的发送文件中出现有节点没有对应,整个过程陆续调至有20分钟最后11电把新程序换掉.
- foreach与Iterable学习
以前对于foreach的使用都是自然而然的感觉,没有深究过为什么可以用,什么时候可以用.最近才发现,原来那些可以使用的类,都是实现了Iterable接口的,否则根本就不能用. 下面是我之前学习时候写的 ...
- wp8 入门到精通 Animation 背景加字体颜色从下向上变化颜色效果
<phone:PhoneApplicationPage.Resources> <Style x:Key="ButtonStyle1" TargetType=&qu ...
- struct和typedef struct
转自:http://www.cnblogs.com/qyaizs/articles/2039101.html struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++ ...
- 从github下载某个git库的4种方法
转自:http://blog.csdn.net/feiniao1221/article/details/7516421 以gerrit-trigger-plugin为例,下面的链接都是从相应页面上直接 ...
- c中malloc的用法
转自:http://blog.sina.com.cn/s/blog_966f8e8501010if7.html Malloc 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类型. ...
- 浅学JSON——Json.NET之首次试手
首次遭遇Json格式,缘由项目中用到Json数据,需要进行解析,为此,将Json数据转为了自己较为熟悉的DataTable格式,以此展示至DataGridView中,验证是否成功. 直接上代码: // ...
- C# 使用 NPOI 库读写 Excel 文件
NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Examples,给出 ...