表现明智,哪有更好?
如果我在查询中有3个或4个join
语句,或者使用嵌入式select
语句从我的数据库中提取相同的信息作为一个查询的一部分?
答案 0 :(得分:2)
我认为加入更好是因为:
select
只能模拟left/right outer join
。有时你不能使用连接来做事情,在这种情况下(并且只有那时)你将不得不回到内部选择。
答案 1 :(得分:1)
它取决于您的数据库:特别是表的大小,还有内存参数,有时甚至是表的索引方式。
在不到当前版本的MySQL上,存在一个查询的可能性,其中子选择比返回由连接构造的相同结果的查询慢得多。 (在MySQL 4.1天中,我看到差异大于一个数量级。)因此,我更喜欢用连接构建查询。
也就是说,有些类型的查询很难用连接构建,而子选择是真正做到这一点的唯一方法。
答案 2 :(得分:-1)
大多数数据库会将以下两个查询优化到同一个计划中,因此您是否这样做:
select A.a1, B.b1 from A left outer join B on A.id = B.a_id
或
select A.a1, (select B.b1 from B where B.a_id = A.id) as b1 from A
它最终是一样的。但是,在大多数情况下,对于非平凡的查询,您最好尽可能地使用连接,特别是因为使用子选择无法实现某些类型的连接(例如内部连接)。
答案 3 :(得分:-1)
假设数据库引擎绝对没有优化,我会说这取决于您需要数据的一致性。如果您在繁忙的数据库上执行多个SELECT
语句,您正在查看的数据可能会快速更改,则可能会遇到数据不匹配的问题,在查询之间。
假设您的数据不包含相互依赖关系,那么多个查询将正常工作。但是,如果您的数据需要一致性,请使用单个查询。
这一观点归结为保持数据的交易安全。考虑一种情况,即您必须提取所有应收账款的总额,该应收账款与货币交易金额保持在一个单独的表中。如果有人要在您的两个查询之间添加另一笔交易,则应收帐款总额将与交易金额的总和不匹配。