各个表的数据量:

sys_file_convert_queue 65989
sys_att_file 73061
sys_att_main 84405
sys_att_rtf_data 1507

优化前,执行时间大概2分多钟
SQL> set autotrace traceonly
SQL> delete from sys_file_convert_queue
where ((fd_file_id is not null or fd_file_id <> '') and
fd_file_id not in (select fd_id from sys_att_file))
or fd_attmain_id not in
(select fd_id
from sys_att_main
union all
select fd_id from sys_att_rtf_data); rows deleted. Execution Plan
----------------------------------------------------------
Plan hash value: --------------------------------------------------------------------------------
--------------- | Id | Operation | Name | Rows | Bytes | Cost (%C
PU)| Time | --------------------------------------------------------------------------------
--------------- | | DELETE STATEMENT | | | 9879K| 125K
()| :: | | | DELETE | SYS_FILE_CONVERT_QUEUE | | |
| | |* | FILTER | | | |
| | | | TABLE ACCESS FULL | SYS_FILE_CONVERT_QUEUE | | 9879K|
()| :: | | | UNION-ALL | | | |
| | |* | INDEX UNIQUE SCAN| SYS_C0015191 | | |
()| :: | |* | INDEX UNIQUE SCAN| SYS_C0015192 | | |
()| :: | |* | INDEX FULL SCAN | SYS_C0014984 | | |
()| :: | --------------------------------------------------------------------------------
--------------- Predicate Information (identified by operation id):
--------------------------------------------------- - filter( NOT EXISTS ( (SELECT "FD_ID" FROM "SYS_ATT_MAIN" "SYS_ATT_MAIN" W
HERE "FD_ID"=:B1) UNION ALL (SELECT "FD_ID" FROM "SYS_ATT_RTF_DATA" "S
YS_ATT_RTF_DATA" WHERE "FD_ID"=:B2)) OR ("FD_FILE_ID" IS NOT NULL OR "FD_FILE_ID"<>
'') AND NOT EXISTS (SELECT FROM "SYS_ATT_FILE" "SYS_ATT_FILE" WHERE LNNVL("FD_ID"<>
:B3))) - access("FD_ID"=:B1)
- access("FD_ID"=:B1)
- filter(LNNVL("FD_ID"<>:B1)) Statistics
----------------------------------------------------------
recursive calls
db block gets
consistent gets
physical reads
redo size
bytes sent via SQL*Net to client
bytes received via SQL*Net from client
SQL*Net roundtrips to/from client
sorts (memory)
sorts (disk)
rows processed
优化后,执行时间2秒不到
SQL> delete from sys_file_convert_queue a
where not exists
(select fd_id from sys_att_file b where a.fd_file_id = b.fd_id)
or not exists (select
from (select fd_id
from sys_att_main
union all
select fd_id from sys_att_rtf_data) c
where a.fd_attmain_id = c.fd_id)
; rows deleted. Execution Plan
----------------------------------------------------------
Plan hash value: --------------------------------------------------------------------------------
---------------- | Id | Operation | Name | Rows | Bytes | Cost (%
CPU)| Time | --------------------------------------------------------------------------------
---------------- | | DELETE STATEMENT | | | 9879K|
()| :: | | | DELETE | SYS_FILE_CONVERT_QUEUE | | |
| | |* | FILTER | | | |
| | | | TABLE ACCESS FULL | SYS_FILE_CONVERT_QUEUE | | 9879K|
()| :: | |* | INDEX UNIQUE SCAN | SYS_C0014984 | | |
()| :: | | | VIEW | | | |
()| :: | | | UNION-ALL | | | |
| | |* | INDEX UNIQUE SCAN| SYS_C0015191 | | |
()| :: | |* | INDEX UNIQUE SCAN| SYS_C0015192 | | |
()| :: | --------------------------------------------------------------------------------
---------------- Predicate Information (identified by operation id):
--------------------------------------------------- - filter( NOT EXISTS (SELECT FROM "SYS_ATT_FILE" "B" WHERE "B"."FD_ID"=:B
) OR NOT EXISTS (SELECT FROM ( (SELECT "FD_ID" "FD_ID" FROM "SYS_ATT
_MAIN" "SYS_ATT_MAIN" WHERE "FD_ID"=:B2) UNION ALL (SELECT "FD_ID" "FD_ID" FROM "SYS_AT
T_RTF_DATA" "SYS_ATT_RTF_DATA" WHERE "FD_ID"=:B3)) "C"))
- access("B"."FD_ID"=:B1)
- access("FD_ID"=:B1)
- access("FD_ID"=:B1) Statistics
----------------------------------------------------------
recursive calls
db block gets
consistent gets
physical reads
redo size
bytes sent via SQL*Net to client
bytes received via SQL*Net from client
SQL*Net roundtrips to/from client
sorts (memory)
sorts (disk)
rows processed

ORACLE数据库SQL优化 not in 与not exits的更多相关文章

  1. Oracle数据库SQL优化

    SQL优化的最终目的是用户体验-在最短时间内让用户在页面数据.因此,执行时间是SQL优化的重要指标.在SQL查询中,I/O操作最占系统性能的.I/O操作量越大,时间越久.减少I/O操作量是优化SQL的 ...

  2. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  3. Oracle 数据库SQL性能查看

    作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...

  4. 基于oracle的sql优化

    [基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库 ...

  5. Oracle之SQL优化专题01-查看SQL执行计划的方法

    在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执 ...

  6. 转://从一条巨慢SQL看基于Oracle的SQL优化

    http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...

  7. 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)

    本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...

  8. 数据库sql优化总结之5--数据库SQL优化大总结

    数据库SQL优化大总结 小编最近几天一直未出新技术点,是因为小编在忙着总结整理数据库的一些优化方案,特此奉上,优化总结较多,建议分段去消化,一口吃不成pang(胖)纸 一.百万级数据库优化方案 1.对 ...

  9. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

随机推荐

  1. ios - 如何获取app上的数据

    做过ios开发的人应该都用过Charles,通常叫它花瓶.Charles是Mac下常用的对网络流量进行分析的工具,类似于Windows下的Fiddler.在开发iOS程序的时候,往往需要调试客户端和服 ...

  2. SSH问题:系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常

    现象:spring加载配置文件applicationContext.xml出错,抛出nested exception is og.xml.sax.SAXParseException; lineNumb ...

  3. 爬虫利器BeautifulSoup模块使用

    一.简介 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,同时应用场景也是非常丰富,你可以使用 ...

  4. linux mysql 忽略大小写

    修改/etc/my.cnf 2)在[mysqld]下加入一行:lower_case_table_names=1 3)重新启动数据库即可.

  5. python_如何在列表、字典中筛选数据?

    实际问题有哪些? 过滤掉列表[3,9,-1,10.-2......] 中负数 筛选出字典{'li_ming':90,'xiao_hong':60,'li_kang':95,'bei_men':98} ...

  6. Linux普通用户修改owner非本人文件为什么成功

    关键字:错误提示:E45 已设定选项’readonly’(请加!强制执行) Linux对文件和目录有很好的权限管理,但今天遇到一个比较诡异的事情,普通用户对文件权限不可写,但可以强制保存该文件,这样就 ...

  7. Linux指令--nl

    原文出处:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件 ...

  8. android 中的ExpandableListView取消一级图标

    mainlistview = (ExpandableListView) view.findViewById(R.id.listview_myteacher); mainlistview.setGrou ...

  9. 【转】<string> <string.h> <cstring>的区别

    #include < string.h > void main() { string aaa = " abcsd d " ; printf( " lookin ...

  10. Cacti在selinux开启的情况下使用

    # chcon -R -t httpd_sys_content_t /var/www/html/cacti