首页 > 其他分享 >exits, in, left join性能比较

exits, in, left join性能比较

时间:2023-05-15 13:57:07浏览次数:31  
标签:account join exits where id card left

https://www.cnblogs.com/roychenyi/p/10724854.html

 exits  in left join性能比较 ,笔者使用的是MYSQL数据库,这三个关键字方法在其他的关系数据库里也是大同小异,如果各种有兴趣,自行比较。

 我这里有一个249_account 表,总数为8538507   249001_account_temp表 总数为 8242734

其中有部分数据,249_account里有,249_account_temp表里没有,要求找出249_account多余数据

 

使用上面三种方法进行查找,三种查到的数据条数都是  294451条

not exits

select count(*) from cunjk.249_account a where   not EXISTS (select card_id from bak.249001_account_temp b where a.card_id = b.card_id );    32.401s

 left join

select count(*) from cunjk.249_account a left  JOIN bak.249001_account_temp b on a.card_id = b.card_id where b.card_id is null ;    22.888s

 in

select count(*) from cunjk.249_account where card_id not in (select card_id from bak.249001_account_temp );   40.306s

 

in 用时      40.306s

not exits   32.401s

left join     22.888s

 

对于数据量的情况

left join 最省时效率更高,in 最效率最低

 

 如果通过上述三种方式,删除多余的数据:

 left join

 delete a from  cunjk.249_account a left OUTER JOIN bak.249001_account_temp b on a.card_id = b.card_id where b.card_id is null ;

 not exits

 delete from cunjk.249_account a where   not EXISTS (select * from bak.249001_account_temp b where a.card_id = b.card_id ) ;

 in

 delete  from cunjk.249_account where card_id not in (select card_id from bak.249001_account_temp ) ;

 

 总结:虽然in 方法写起来很简单,但是性能不够好,left join 外连接,需要关联条件,看起来有一些复杂,但是性能最优。

请适合自己的方法

标签:account,join,exits,where,id,card,left
From: https://www.cnblogs.com/Dongmy/p/17401644.html

相关文章

  • thread 中 join 和 detach 函数
    在C++中,库提供了多线程编程的功能,其中包含了std::thread类,该类用于创建和控制线程。std::thread类提供了两个重要的成员函数:join()和detach(),用于管理线程的生命周期。join()函数:join()函数用于等待线程执行完成,并将线程的执行结果合并到当前线程。换句话说,join()函数会阻塞当前......
  • MySQL学习日志七,联表查询Join ON
    网上找的七种Join查询图片--查询参加考试的同学,包含的信息包括学号,姓名,科目编号,分数/*分析思路1.分析需求,查询的字段涉及到哪些表2.确定要哪些连接查询3.确定交叉点,涉及到的表有哪些相同的字段判断条件:学生表的studentno=成绩表的studentno*/joinon连接查询joinw......
  • STATA joinby命令
    joinby。当我们进行数据的横向合并时,经常会用到merge命令,但是在使用merge命令进行一对一合并、一对多合并、多对一合并和多对多合并都不是我们想要的结果时,可以考虑使用joinby组内交叉合并。老规矩,还是先上命令语法和选项介绍。一、命令介绍1、命令语法 joinby[varlist]usin......
  • spring aop MethodSignature = (MethodSignature) joinPoint.getSignature();
    MethodSignaturesignature=(MethodSignature)joinPoint.getSignature();为什么这里可以转回为MethodSignatrue,官网上没有这么说,如果这里转换失败,那运行会报错,这是不允许的。必须找到调用这里的代码,看看这里的Signature 是怎么放进去的。网上找了好久没有找到相关知识......
  • 关于使用kubeadm reset命令对kubeadm init与kubeadm join操作后遇到报错的情况-进行恢
    在Kubernetes/k8s集群中,无论是在开始的master节点初始化,还是后面客户端使用kubeadmjoin命令加入到集群可能都会遇到很多报错,对于新手来说、很多还不是很好解决、也有一些情况,是在初始化之前忘记执行一些操作,而导致报错这种一般都需要执行漏掉的操作,重新执行初始化操作,但是如......
  • MySQL中的Join 的算法(NLJ、BNL、BKA)
    本文已收录至Github,推荐阅读......
  • 【大数据】Hive Join 的原理与机制
    目录一、概述二、环境准备三、HiveJOIN类型四、Map,Shuffle,Reduce三阶段1)Map阶段2)Shuffle阶段3)Reduce阶段五、CommonJoin(Reduce阶段)六、MapJoin(Map阶段)一、概述Hive是一个基于Hadoop的数据仓库解决方案,它提供了类似于SQL的查询语言,称为HiveQL,用于处理结构化数据。在Hive中......
  • Semi-Join Subquery优化策略
    Semi-JoinSubquery优化策略Semi-JoinSubquery(半连接子查询):对应IN或EXISTS子查询,仅需要检查"外表记录"在"子查询结果集"中是否存在匹配记录,不需要计算"子查询结果集"中记录匹配次数,也不需要返回"子查询结果集"中匹配记录内容在MariaDB(MySQL)中,常用优化Semi-Join(半连接)的策......
  • JAVA中的两个容器StringBuilder和StringJoiner概述
    JAVA中的两个容器StringBuilder和StringJoiner概述StringBuilder可以看成一个容器,创建之后里面的内容是可以修改的方法名说明publicStringBuilderappend(任意类型)添加数据,并返回对象本身publicStringBuilderreverse()反转容器中的内容publicintlength()返......
  • K8s报错:[preflight] WARNING: JoinControlPane.controlPlane settings will be ignore
    一、报错信息[preflight]WARNING:JoinControlPane.controlPlanesettingswillbeignoredwhencontrol-planeflagisnotset.[preflight]Runningpre-flightcheckserrorexecutionphasepreflight:[preflight]Somefatalerrorsoccurred:[ERRORFileAvailabl......