假设有一个实体
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。
我需要同时获取教师列表和书籍列表 性能明智和灵 active 明智更明智。
(1) 带连接的单个查询 (2) 1 个用户查询,然后 1 个以 subject_id 作为过滤器的教师查询,然后 1 个以 subject_id 作为过滤器的图书查询
请务必考虑性能、实体构建逻辑和更改的灵 active ,例如。在同一 API 中,用户可以提供一个标志来告知是否在响应中包含图书列表。 还有在企业项目中如何决定使用哪种方法。
最佳答案
这取决于...
- 在最坏的情况下,
Subject
有多少个Teacher
? - 在最坏的情况下,
Subject
有多少Book
? - 最坏的情况下有多少
Subject
? - 还有其他关联实体吗?
如果响应为 10, 50, 1000, no
,结果可能会返回 500 000 行 (10*50*1000)!
那么你应该考虑笛卡尔积
如果笛卡尔积没有问题,联接速度会更快。
关于mysql - 具有多个联接的大型查询与多个单个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41583612/