1、要有唯一索引或者主键作为前提,减少数据冲突的数量,如示例标红的地方:

 
2、当有in查询的时候,尽量用exists,这样能提高查询效率:

create table TF_F_USER_DIFF1 tablespace BD_TBS_EXP_DATA parallel 20  as  select /*+ parallel(c,20) */ * from TF_F_USER_DIFF c where  not exists(select /*+ parallel(a,10) */ user_id from TF_F_USER_CRM a where a.user_id=c.user_id);
低效率查询是这样的:
create table TF_F_USER_DIFF1 tablespace BD_TBS_EXP_DATA parallel 20  as  select /*+ parallel(c,20) */ * from TF_F_USER_DIFF c where  a.user_id not in(select /*+ parallel(a,10) */ user_id from TF_F_USER_CRM a);
 
3、ORACLE中的minus内部实现是有唯一索引机制或者主键机制,所以不需要像在其他表数据比对软件中那样要指定唯一索引或者主键那么麻烦,这个大赞。
 
4、如果两张表的数据量差异太大的话,建议按每个列分别比对,而不是把所有的列放在一起直接minus,因为minus之后的结果需要关联查询,两张大表关联查询效率不高。
  1)分别比对:select columnA,columnB from tableA minus select columnC,columnD from tableB,其中columnA,columnC分别是两张表的主键,这样就只比对columnB,columnD这两列了。
  2)把所有的列放在一起比对:select columnA,columnB,columnE,columnF,columnG,coulumnH from tableA minus select columnC,columnD,columnL,columnM,columnN,coulumnI from tableB
 
5、找出既在A表中有数据,又在C表中有数据,其中VPN_ID、MEMBER_ROLE_ID、START_DATE是联合主键:

create table Tf_f_User_Member_CRM tablespace BD_TBS_EXP_DATA parallel 20 as
SELECT /*+ parallel(c,20) */
*
FROM TF_F_USER_MEMBER_DIFF C
WHERE EXISTS (SELECT /*+ parallel(a,10) */
a.vpn_id,a.member_role_id,a.start_date
FROM ucr_group_online.TF_F_USER_MEMBER_DIFF A
WHERE A.VPN_ID = C.VPN_ID AND A.MEMBER_ROLE_ID = C.MEMBER_ROLE_ID AND A.START_DATE = C.START_DATE);

最好不要用下面的SQL语句,因为它是等值查询,会发生笛卡尔积,导致数据成倍的增长,最终结果不准确:

create table Tf_f_User_Member_diff1 tablespace BD_TBS_EXP_DATA parallel 20 as
SELECT /*+ parallel(c,20) */ /*+ parallel(a,20) */
c.*
FROM TF_F_USER_MEMBER_DIFF C, UCR_GROUP_ONLINE.TF_F_USER_MEMBER_DIFF A
WHERE A.VPN_ID = C.VPN_ID AND A.MEMBER_ROLE_ID = C.MEMBER_ROLE_ID AND A.START_DATE = C.START_DATE;

 
6、找出只在C表中存在数据,A表中不存在相同的数据,其中VPN_ID、MEMBER_ROLE_ID、START_DATE是联合主键:

create table Tf_f_User_Member_CRM tablespace BD_TBS_EXP_DATA parallel 20 as
SELECT /*+ parallel(c,20) */
*
FROM TF_F_USER_MEMBER_DIFF C
WHERE not EXISTS (SELECT /*+ parallel(a,10) */
a.vpn_id,a.member_role_id,a.start_date
FROM ucr_group_online.TF_F_USER_MEMBER_DIFF A
WHERE A.VPN_ID = C.VPN_ID AND A.MEMBER_ROLE_ID = C.MEMBER_ROLE_ID AND A.START_DATE = C.START_DATE);

 
7、oracle中的minus有排重作用:比如A={1,2,3,4},B={5,6,7,7},虽然两边的数据量是一样的,数据是完全不同的,理应B minus A的数据量是4,但是B minus A={5,6,7},只有三条数据,就是因为minus排重了。A minus B={1,2,3,4},数据量是4,说明A表中没有重复数据。

oracle中的minus数据比对的更多相关文章

  1. oracle中使用minus进行数据排除(类似SqlServer except函数)

    minus这个集合操作符号的作用是从一个结果集合中减掉另一个结果集中数据,也就是说从一个结果集中去除两个结果集中的共有部分. 下面是一些例子: 这个例子使用minus从第一个结果集中将两个结果集的公有 ...

  2. Oracle中INTERSECT,MINUS,UNION,UNION ALL用法

    intersect 就是交集minus 就是差集 交集就是两个结果集中都有的元素 比如 select uid from tb1 intersect select uid from tb2 那么既存在t ...

  3. Oracle中的Union、Union All、Intersect、Minus

    Oracle中的Union.Union All.Intersect.Minus  众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包括 ...

  4. oracle中union和minus的用法【oracle技术】

    UNION是将两个或者两个以上的搜索结果集合并在一起!这个合并是有条件滴!记录的类型要匹配啦,记录的列数要一样啦!看看下面简单的例子: 有的朋友会说为什么要用union呢,直接用txt3 in ('I ...

  5. Oracle中的sql操作符 和分析函数

    Oracle中的操作符算术操作符:无论是在sqlserver,或者是java中,每种语言它都有算术操作符,大同小异. Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle ...

  6. Oracle中Kill session的研究(转 出自eagle)

    itpub link: http://www.itpub.net/235873.html 我们知道,在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为: a ...

  7. Oracle中的rownum用法解析

    注意:rownum从1开始:  1.rownum按照记录插入时的顺序给记录排序,所以有order by的子句时一定要注意啊!  2.使用时rownum,order by字段是否为主键有什么影响?  3 ...

  8. 转:Oracle中的rownum不能使用大于>的问题

    一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.< ...

  9. ORACLE 中KILL session

    我们知道,在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为: alter system kill session 'sid,serial#' ; 被kil ...

随机推荐

  1. HDU 1426 Sudoku Killer (回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398818 题意: 给你一个 9*9 的矩阵,同一行相邻的两个元素用一个空格分开.其中1-9代表该位 ...

  2. 模板—字符串—AC自动机(多模式串,单文本串)

    模板—字符串—AC自动机(多模式串,单文本串) Code: #include <queue> #include <cstdio> #include <cstring> ...

  3. 「kuangbin带你飞」专题十九 矩阵

    layout: post title: 「kuangbin带你飞」专题十九 矩阵 author: "luowentaoaa" catalog: true tags: mathjax ...

  4. #424 Div2 C

    #424 Div2 C 题意 给出 k 个分数,初始分数未知,按顺序把这 k 个分数加到初始分数上,已知 n 个加入分数后的结果(无序),问初始分数有多少种可能. 分析 也就是说这 n 个结果,它们之 ...

  5. [CP1804]最短路

    题目大意: 一个$n(n\le10^5)$个点的图,给定一个常数$c$,每对点$i,j$之间有权值为$(i\oplus j)\times c$的边.另有$m(m\le5\times10^5)$条指定权 ...

  6. sqlserver 巧用REVERSE和SUBSTRING实现lastindexof

    原文:sqlserver 巧用REVERSE和SUBSTRING实现lastindexof select REVERSE(SUBSTRING(REVERSE(testFixtureNumber),0, ...

  7. DATASNAP数据提交之FIREDAC的TFDJSONDeltas

    DATASNAP数据提交之FIREDAC的TFDJSONDeltas FIREDAC的TFDJSONDeltas相当于CLIENTDATASET的DELTA,是作为CLIENTDATASET.DELT ...

  8. 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法

    使用ASIHTTPRequest xcode编译提示找不到"libxml/HTMLparser.h",解决方法如下: 1>.在xcode中左边选中项目的root节点,在中间编 ...

  9. VUE -- 十分钟入门 Less

    这篇文章来自 Danny Markov, 是我最喜欢的博主之一,实际上我最近翻译的一些文章全是出自他手.在查看本文之前你也可以 查看原文. 我们都知道写 CSS 代码是有些枯燥无味的,尤其是面对那些成 ...

  10. react with JSX for {if…else…}

    在react中用jsx渲染dom的时候经常会遇到if条件判断,然而在jsx中竟是不允许if条件判断的.以下有几种判断方式,可以根据自己的应用场景,挑选适合的 https://blog.csdn.net ...