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. 七. 多线程编程6.isAlive()和join()的使用

    如前所述,通常你希望主线程最后结束.在前面的例子中,这点是通过在main()中调用sleep()来实现的,经过足够长时间的延迟以确保所有子线程都先于主线程结束.然而,这不是一个令人满意的解决方法,它也 ...

  2. devexpress XtraReport报表 ---主从报表

    private void GetWqpWorkPrinter(List<ReelListMagt> list, string WorkDate, User user) { ReelList ...

  3. LAMP----linux+apache+mysql+php详细安装步骤之一APACHE篇(openldap等)

    LAMP----linux+apache+mysql+php详细安装步骤之一APACHE篇(openldap等) linux详细版本为RHEL5.3 [root@localhost mail]# un ...

  4. Intel VTune性能分析器基础

    https://wenku.baidu.com/view/b0fe162ebd64783e09122b66.html

  5. 使用MySQL正则表达式 __MySQL必知必会

    正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...

  6. Eclipse插件开发 学习笔记 PDF 第一篇到第四篇 免分下载 开发基础 核心技术 高级进阶 综合实例

    <<Eclipse插件开发 学习笔记>>,本书由浅入深.有重点.有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章.第一篇介绍Eclipse平台界面开发的基础知识 ...

  7. Console-算法:fun1(do while)

    ylbtech-Arithmetic:Console-算法[do while]-XX   1.A,Demo(案例) 1.B,Solution(解决方案) using System; namespace ...

  8. MIT算法导论笔记

    详细MIT算法导论笔记 (网络链接) 第一讲:课程简介及算法分析 (Sheridan) 第二讲:渐近符号.递归及解法  (Sheridan) 第三讲:分治法(1)(Sheridan) 第四讲:快排及随 ...

  9. python 小技巧(glob,guid,序列化,压缩字符,有序字典,sorted函数,分片)

    1.glob模块 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:”*”, “?”, “[]”.”* ...

  10. Spark Streaming与Storm的对比及使用场景

    Spark Streaming与Storm都可以做实时计算,那么在做技术选型的时候到底应该选择哪个呢?通过下图可以从计算模型.计算延迟.吞吐量.事物.容错性.动态并行度等方方面进行对比. 对比点    ...