对于sql, 多个表进行连接(外连接和内连接), 是先进行筛选出每个表中需要的内容, 再将这些筛选出的表进行外连接比较好,还是先直接将几个表进行连接,最后在where里面进行条件筛选比较好呢?
对于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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
个人认为各有利弊,第一中在表中数据量不是很大的情况下效率较高。第二中情况在表中数据量较大的情况下较高。毕竟数据量太大的话,联合查询产生的笛卡尔积会比较大,筛选起来效率较低。
还要看各个数据库厂商在联合查询时的实现方式,了解各个厂商的实现方式再根据具体情况写出来的sql才会是比较高效的sql
第一种可以将条件提前,连接放后面,跟后面语句差别不大
肯定先筛选呀,筛选后的数据量就小很多,查询快很多,如果数据量大的,效率上很明显。
谢谢大家的回答, 我刚刚又看到一个帖子 http://wenyan.blog.51cto.com/72002/10623,这个里面主张 先对结果进行选择, 再进行连接
自己explain不就知道了
我用的是MySql
回复
不管啥数据库,explain看下执行计划就知道了
跟具体的数据库有关,不同数据库有不同的行为。比如postgres
where (t.a = t1.b and 1 != 1)这个条件,它会自动去掉当它不存在
嵌套查询效率低于第一种
第一种就可以了,第二种嵌套查询