具有多个连接的巨大查询与多个单个查询
Posted
技术标签:
【中文标题】具有多个连接的巨大查询与多个单个查询【英文标题】:Huge query with multiple joins vs Multiple single queries 【发布时间】:2017-05-25 19:33:49 【问题描述】:假设有一个实体
public class Subject
private int id;
private String name;
private List<Teacher> teacher;
private List<Book> books;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public List<Teacher> getTeacher()
return teacher;
public void setTeacher(List<Teacher> teacher)
this.teacher = teacher;
public List<Book> getBooks()
return books;
public void setBooks(List<Book> books)
this.books = books;
对于 Rest API,获取主题详细信息,其中我将提供主题 ID。
然后我需要获取教师列表和书籍列表 在性能方面和灵活性方面哪个更明智。
(1) 带连接的单个查询 (2) 1 次查询用户,1 次查询教师,以 subject_id 作为过滤器,1 次查询以 subject_id 作为过滤器的书籍
请务必考虑性能、实体构建逻辑和对更改的灵活性,例如。在同一个 API 中,用户可以提供一个标志来判断是否包含图书列表作为响应。 以及如何在企业项目中决定使用哪种方法。
【问题讨论】:
一般来说,到数据库的往返次数越少越好,但每当出现不确定性时,一个简单的测试就可以提供答案 唯一的答案是“视情况而定”。 【参考方案1】:这取决于...
在最坏的情况下,Subject
有多少 Teacher
?
在最坏的情况下有多少 Book
与 Subject
?
在最坏的情况下有多少Subject
?
还有其他链接实体吗?
如果响应为10, 50, 1000, no
,则结果可能返回 500 000 行 (10*50*1000)!
你应该考虑笛卡尔积
如果笛卡尔积不成问题,联接会更快。
【讨论】:
以上是关于具有多个连接的巨大查询与多个单个查询的主要内容,如果未能解决你的问题,请参考以下文章