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. poj2104(划分树模板)

    poj2104 题意 给出一个序列,每次查询一个区间,要求告诉这个区间排序后的第k个数. 分析 划分树模板,O(mlogn). 建树.根据排序之后的数组,对于一个区间,找到中点的数,将整个区间分为左右 ...

  2. Find the Duplicate Number -- LeetCode

    Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...

  3. luogu P1821 [USACO07FEB]银牛派对Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...

  4. 【gcc】warning: control reaches end of non-void function

    用gcc编译一个C程序的时候出现这样的警告: warning: control reaches end of non-void function 它的意思是:控制到达非void函数的结尾.就是说你的一 ...

  5. 【SQL Server 学习系列】-- sql 随机生成中文名字

    原文:[SQL Server 学习系列]-- sql 随机生成中文名字 ,) )) -- 姓氏 ,) )) -- 名字 INSERT @fName VALUES ('赵'),('钱'),('孙'),( ...

  6. linux 之创建文件命令

    1.vi vi 1.txt 会直接创建并打开一个文件1.txt 2.touch touch的作用是更改一个文件或目录的时间.touch 2.txt 如果2.txt不存在,则创建空文件2.txt 3.e ...

  7. iOS教程:如何使用Core Data – 预加载和引入数据

    这是接着上一次<iOS教程:Core Data数据持久性存储基础教程>的后续教程,程序也会使用上一次制作完成的. 再上一个教程中,我们只做了一个数据模型,之后我们使用这个数据模型中的数据创 ...

  8. cornerstone

    这东西是mac上的svn,忽然就不对劲了.感觉就是代码就是没拿对.里面显示都是正确的. 删了重新拿....

  9. 机器学习第2课:单变量线性回归(Linear Regression with One Variable)

    2.1  模型表示 之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示: 我们将要用来描述这个回归问题的标记如下: m                代表训练集中实 ...

  10. ASP.NET MVC学习---(四)MVC初窥

    前面三篇大幅度的介绍了EF框架 这并不是没有道理的 现在使用mvc开发一般都离不开ef 因为它们相结合可以为你带来完美的体验 当然 前面所描述的仅仅是ef框架的冰山一角 它是一门学问很深的功课 如果你 ...