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

发布于 2021-12-02 12:53:59 字数 670 浏览 962 评论 10

对于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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

秋意浓 2021-12-03 23:37:02

个人认为各有利弊,第一中在表中数据量不是很大的情况下效率较高。第二中情况在表中数据量较大的情况下较高。毕竟数据量太大的话,联合查询产生的笛卡尔积会比较大,筛选起来效率较低。

还要看各个数据库厂商在联合查询时的实现方式,了解各个厂商的实现方式再根据具体情况写出来的sql才会是比较高效的sql

海之角 2021-12-03 23:37:01

第一种可以将条件提前,连接放后面,跟后面语句差别不大

疑心病 2021-12-03 23:36:55

肯定先筛选呀,筛选后的数据量就小很多,查询快很多,如果数据量大的,效率上很明显。

掩饰不了的爱 2021-12-03 23:36:51

谢谢大家的回答, 我刚刚又看到一个帖子 http://wenyan.blog.51cto.com/72002/10623,这个里面主张 先对结果进行选择, 再进行连接

女中豪杰 2021-12-03 23:36:15

自己explain不就知道了

毁梦 2021-12-03 23:35:13

我用的是MySql

私藏温柔 2021-12-03 23:35:00

回复
不管啥数据库,explain看下执行计划就知道了

羁拥 2021-12-03 23:09:37

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

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

月亮是我掰弯的 2021-12-03 23:08:41

‍嵌套查询效率低于第一种

浅沫记忆 2021-12-03 22:47:26

第一种就可以了,第二种嵌套查询

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文