Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【求助】从大表中删除小表中存在的记录问题

【求助】从大表中删除小表中存在的记录问题

作者头像
bisal
发布于 2019-01-29 03:09:00
发布于 2019-01-29 03:09:00
5.5K0
举报

A表:30万,主键ID B表:300万,主键ID 从B表中删除ID=A表ID的记录。 DELETE FROM B WHERE EXISTS (SELECT 1 FROM (SELECT ID FROM (SELECT T.ID, ROWNUM RN FROM A) WHERE RN > 0 AND RN <= 50000) AB WHERE A.ID = B.ID); 但执行计划显示COST较大,且瓶颈是B表的全表扫描。 需求是这里有B1 ... B10多个B表(都是300万),串行操作相当于10次B表的全表扫描,因为磁盘IO性能较差,执行单个DELETE时都可能占据较大CPU,所以不能并行。 是否还有优化空间呢?请高手指点,谢谢! Execution Plan ---------------------------------------------------------- Plan hash value: 3752040547 ------------------------------------------------------------------------------------------------- | Id  | Operation               | Name          | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | ------------------------------------------------------------------------------------------------- |   0 | SELECT STATEMENT        |               |   225K|    15M|       | 18309  (1)| 00:03:40 | |*  1 |  HASH JOIN RIGHT SEMI   |               |   225K|    15M|  4168K| 18309  (1)| 00:03:40 | |*  2 |   VIEW                  |               |   133K|  2604K|       |    88  (2)| 00:00:02 | |   3 |    COUNT                |               |       |       |       |     |          | |   4 |     INDEX FAST FULL SCAN| P_A                |   133K|   911K|       |    88  (2)| 00:00:02 | |   5 |   TABLE ACCESS FULL     | B                |  3598K|   171M|       |  7448  (1)| 00:01:30 | ------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): ---------------------------------------------------    1 - access("A"."ID"="ID")    2 - filter("RN">0 AND "RN"<=50000)

Statistics ----------------------------------------------------------           1  recursive calls           0  db block gets       27479  consistent gets           0  physical reads           0  redo size       11651  bytes sent via SQL*Net to client         645  bytes received via SQL*Net from client          13  SQL*Net roundtrips to/from client           0  sorts (memory)           0  sorts (disk)         168  rows processed

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年09月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用分析函数改写范围判断自关联查询
分析、定位数据库的主要负载是这条语句引起的过程相对简单,通过AWR报告就可以比较容易的完成定位,这里就不赘述了。
数据和云
2018/10/25
7150
利用分析函数改写范围判断自关联查询
【DB笔试面试592】在Oracle中,表和表之间的关联方式有哪几种?
① 排序合并连接(Sort Merge Join,简称SMJ),Oracle 6提供
AiDBA宝典
2019/09/29
2.2K0
【DB笔试面试592】在Oracle中,表和表之间的关联方式有哪几种?
雏鹰展翅|Oracle 单表分页查询优化
近日中午一开发过来说生产有条 SQL 执行缓慢,让看一下执行计划。测试环境说也有同样的问题 SQL 且数据量一样,那么则开始在测试环境搞一搞吧,排查过程大概记录如下,对于优化也就是一知半解,故此只能抛砖引玉,如有错误还望指正。
JiekeXu之路
2021/12/02
1.9K0
雏鹰展翅|Oracle 单表分页查询优化
Oracle 全表扫描及其执行计划(full table scan)
    全表扫描是Oracle访问数据库表是较为常见的访问方式之一。很多朋友一看到SQL语句执行计划中的全表扫描,就要考虑对其进行修理一番。全表扫描的存在,的确存在可能优化的余地。但事实上很多时候全表扫描也并非是最低效的,完全要看不同的情形与场合,任一方式都是有利有弊的,也就是具体情况要具体分析。本文描述了什么是全表扫描以及何时发生全表扫描,何时全表扫描才低效。   本文涉及到的相关链接: 高水位线和全表扫描 启用 AUTOTRACE 功能 Oracle 测试常用表BIG_TABLE Oracle
Leshami
2018/08/13
2.8K0
【Oracle】-【ROWNUM与索引】-索引对ROWNUM检索的影响
看到ASK TOM的一篇文章,挺有感触的。 http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:32812348052
bisal
2019/01/29
1.1K0
INDEX FULL SCAN vs INDEX FAST FULL SCAN
     INDEX FULL SCAN 与 INDEX FAST FULL SCAN两个长相差不多,乃是一母同胞,因此既有其共性,也有其个性。两者来说其共性是不用扫描表而是通过索引就可以直接返回所需要的所有数据。这对提高查询性能而言,无疑是一个难得的数据访问方式之一,因为索引中存储的数据通常是远小于原始表的数据。下面具体来看看两者之间的异同。
Leshami
2018/08/14
2.4K0
Oracle 索引扫描的几种类型
1.对于unique index来说,如果where 条件后面出现了<,> ,between ...and...的时候,那么就可能执行index range scan,如果where条件后面是=,那么就会执行index unique scan。
星哥玩云
2022/08/17
6200
【DB笔试面试475】分区表性能注意事项有哪些?
② 在设计分区表时,避免数据都进入默认分区,从而导致出现默认分区超大或各个分区大小严重不均衡的情况,失去分区表的意义。
AiDBA宝典
2019/09/30
5750
关于验证表中有无数据的方法比较(r2笔记54天)
在平时的工作中,有时候需要准备一些脚本,比如能够简单验证一下表是否可访问,或者验证表中有无数据等。 今天在测试环境进行了简单的模拟,发现还是有很大的差别。 简单来说,要实现如上的需求有两种方式,一种是通过count来判断,另外一种是通过rowid来判断。 举个例子。 先来看一个大表,但是某个分区没有数据的情况。 select count(1) from APP_TMP.INVOICE partition(A8_B8) where rownum<=1; Execution Plan ---------
jeanron100
2018/03/14
7540
【DB笔试面试258】在Oracle中,执行计划里的access和filter有什么区别(下)?
有关access和filter的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2141522/
AiDBA宝典
2019/09/30
1.2K0
左右db_block_size了解和实验
创建一个区大小为 40k SYS@ORCL>show parameter db_block_size
全栈程序员站长
2022/07/06
3110
【DB笔试面试621】在Oracle中,举例说明“DISTINCT配置(Distinct Placement,DP)”查询转换。
在Oracle中,举例说明“DISTINCT配置(Distinct Placement,DP)”查询转换。
AiDBA宝典
2019/09/29
5770
【DB笔试面试616】在Oracle中,和“消除”相关的查询转换有哪些?
(四)公共子表达式消除(Common Sub-expression Elimination,CSE)
AiDBA宝典
2019/09/29
1.2K0
使用decode函数
Oracle 的decode函数蛮有意思,是oracle独有的,国际标准SQL中并没有decode函数。
全栈程序员站长
2022/09/16
8420
关于虚拟索引的学习(r3笔记第75天)
昨天简单总结了下不可见索引,今天来说说虚拟索引。 这两个索引听起来有点类似。其实差别还是比较大。 不可见索引有对应的索引段,而虚拟索引没有对应的索引段存在。 不可见索引可以通过alter语句来直接切换可见不可见。而对于虚拟索引而言这些操作都不支持。 不可见索引可以在user_indexes中查到对应的数据字典信息。但是虚拟索引在user_indexes中都没有记录,最后只能从dba_objects里面勉强查到一条它存在的记录。 不可见索引和虚拟索引都有对应的数据库参数,可以通过a
jeanron100
2018/03/15
6930
@dbsnake-用合适的函数索引来避免看似无法避免的全表扫描
昨天听了@dbsnake的SQL方法论,感觉比第一次要更有感觉,希望对实际工作能有帮助。
bisal
2019/01/29
6160
sql_profile的使用(一) (r2笔记29天)
今天看了老熊关于sql_profile的讲解,受益匪浅,自己在本机也做了一通,感觉好记性不如烂笔头还是得多总结总测试才能真正理解。 准备的数据如下,创建两个表,一个大,一个小,然后做表分析 SQL> create table t1 as select object_id,object_name from dba_objects where rownum<=50000; Table created. SQL> create table t2 as select * from dba_objects;
jeanron100
2018/03/14
5460
补偏救弊 | 关于一致性读与语句性能关系的一大误区
作者简介 黄玮(Fuyuncat) 资深 Oracle DBA,致力于数据库底层技术的研究,其作品获得广大同行的高度评价。 个人网站 www.HelloDBA.com 研究背景 实际上,我们所说的保证
数据和云
2018/03/05
7210
补偏救弊 | 关于一致性读与语句性能关系的一大误区
【DB笔试面试619】在Oracle中,举例说明“连接因式分解(Join factorization,JF)”查询转换。
在Oracle中,举例说明“连接因式分解(Join factorization,JF)”查询转换。
AiDBA宝典
2019/09/29
3810
SQL Tuning 基础概述10 - 体会索引的常见执行计划
在《SQL Tuning 基础概述05 - Oracle 索引类型及介绍》的1.5小节,提到了几种"索引的常见执行计划":
Alfred Zhao
2019/05/24
3490
推荐阅读
相关推荐
利用分析函数改写范围判断自关联查询
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档