对于sql, 多个表进行连接(外连接和内连接), 是先进行筛选出每个表中需要的内容, 再将这些筛选出的表进行外连接比较好,还是先直接将几个表进行连接,最后在where里面进行条件筛选比较好呢?

合取 发布于 2016/09/07 17:49
阅读 1K+
收藏 1

对于sql,  多个表进行连接(外连接和内连接), 是先进行筛选出每个表中需要的内容, 再将这些筛选出的表进行外连接比较好,还是先直接将几个表进行连接,最后在where里面进行条件筛选比较好呢?

举例A

selet a.*,b.*
from tab1 a,tab2 b
where a.Id = b.ReferenceID
a.name = "apple" andb.name="banana"
举例B

select a.* ,b.*
from ( select * from tab1 where name='apple' ) a,
(select * from tab2 where name='banana') b
on a.ID = b.referenceID



这两种查询方式 哪种比较好呢? 考虑到数据很多的时候, 哪种比较省时间?






加载中
1
小虫0302
小虫0302
第一种就可以了,第二种嵌套查询
1
败家老头☞起个网名真难
败家老头☞起个网名真难
‍嵌套查询效率低于第一种
0
乌龟壳
乌龟壳

跟具体的数据库有关,不同数据库有不同的行为。比如postgres

where (t.a = t1.b and 1 != 1)这个条件,它会自动去掉当它不存在

乌龟壳
乌龟壳
回复 @合取 : 不管啥数据库,explain看下执行计划就知道了
合取
合取
我用的是MySql
0
death_rider
death_rider
自己explain不就知道了
0
合取
合取
谢谢大家的回答, 我刚刚又看到一个帖子 http://wenyan.blog.51cto.com/72002/10623,这个里面主张 先对结果进行选择, 再进行连接
0
lyle_luo
lyle_luo
肯定先筛选呀,筛选后的数据量就小很多,查询快很多,如果数据量大的,效率上很明显。
0
hx66947218
hx66947218
第一种可以将条件提前,连接放后面,跟后面语句差别不大
0
l
liun
个人认为各有利弊,第一中在表中数据量不是很大的情况下效率较高。第二中情况在表中数据量较大的情况下较高。毕竟数据量太大的话,联合查询产生的笛卡尔积会比较大,筛选起来效率较低。
还要看各个数据库厂商在联合查询时的实现方式,了解各个厂商的实现方式再根据具体情况写出来的sql才会是比较高效的sql
返回顶部
顶部