2016 - 2024

感恩一路有你

join为什么比子查询快 mysql两表关联查询和子查询的区别?

浏览量:2433 时间:2021-03-13 20:46:00 作者:admin

mysql两表关联查询和子查询的区别?

关联查询(join)与子查询(in):

两者select的时间复杂度是一样的(注:这里的select是指获得数据的方式,个数)。

唯一不同的是对于in子查询它每次执行内部查询的时候都必须重新构造一个JOIN结构(这就是大家常说的会将子查询转化成where exists(select 1 from a,b where a.id = b.id )),完成相应的初始化操作,并且在这次内部查询结束之后,要完成相应的析构函数,如index_init,index_end,而当外部查询是全表扫描的时候,这些操作的次数就是它的记录数,那么它们(构造,析构)所占用的性能也是显而易见的。简单一句话子查询的性能除了查询外,还消耗在JOIN的构造与析构过程。

是in子查询快还是inner join快?

一般认为,inner join 因为不涉及到子查询,可能会被用in子查询效率高一些。

但是这个要看具体的dbms的数据统计情况,索引情况。

当然一般来说,建议能不用子查询的情况下,就不用的。

mysql多个leftjoin连接查询用法分析?

当然是这样的,因为in会使用你的子查询字段去到主表匹配你需要的行,而exists是根据匹配项去判断是或者否,然后根据是否决定结果,子查询的表大,用exists判断,效率就会高,而当子查询很小的时候,直接匹配你需要的值则更快。比如主表4万行,子查询里面有5条数据,那么exists会把4万行在子查询里面进行匹配,匹配上了就显示,匹配不上就不显示,所以需要判断4万次,而in则会在主表4万行里面去检索这5条记录,由于索引等等的存在,in的效率通常会更高,但是如果反过来,主表5条记录,子查询里面有4万行,exists只进行5次判断,而in会用4万个数据去匹配这5条记录,当然exists更快。

join为什么比子查询快 join查询利弊 mysql子查询和join

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。