字段vs join中的sql性能子查询

r7knjye2  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(255)

我想知道在字段或join中使用子查询哪个查询的性能更好。
例如,我有两个表book&author(它们之间的一对多关系为author1->*book)。

Sub Query in field (fetching author name using subquery):
select 
 b.book_id,
 b.book_name,
 b.author_id,
 (select author_name from author where author.id=b.author_id as author_name
 from book b

Join Query (fetching author name by joining book & author tables):
select 
 b.book_id,
 b.book_name,
 b.author_id,
 a.author_name
 from book b inner join author a on b.author_id = a.author_id

我使用的是postgres数据库,如果我检查查询计划,那么join将执行嵌套循环,而子查询只使用pk author\u id。

jogvjijk

jogvjijk1#

它们做不同的事情。与第一个查询等价的是左连接,而不是内部连接。只有在你能保证的情况下,它们才是等价的 author 从来没有超过一个匹配。
此外,如果 author 对于给定的行,返回多行 author_id .
所以,你应该使用你想要的版本。
也就是说,如果您有两个等价的查询版本(使用 left join ),那么执行计划应该非常相似。特别是,两者都将利用 authors(author_id) --从性能的Angular 来看,这才是你真正关心的。

相关问题