SQL Join表从2个不同表中的1个优化搜索

时间:2017-04-18 16:37:52

标签: sql postgresql join query-optimization

作为简化,我有四个表,书,出版商,作者和公司。本书和出版商都引用了作者,但该引用可以为null

我可以通过使用这样的OR连接查询加入作者表来找到作者,但速度非常慢。

编辑我必须使用作者表加入另一个。

架构:

schema design

select book.title, author.name, company.name as company_name from book inner join publisher on book.publisher_id = publisher.id inner join author on (book.author_id = author.id OR publisher.author_id = author.id) inner join company on author.company_id = company.id;

我想知道优化此查询的最佳方法是什么,而不是加入OR条件。感谢

1 个答案:

答案 0 :(得分:0)

你是对的。 <{1}}子句中的OR可以真正减慢查询速度。

相反,请使用两个ON s:

left join

正式地,如果您只想在其中一个表中返回匹配的行,则可能需要添加select b.title, coalesce(ab.name, ap.name) as name from book b inner join publisher p on b.publisher_id = p.id left join author ab on b.author_id = ab.id left join author ap on p.author_id = ap.id;