mysql - 具有多个联接的大型查询与多个单个查询

标签 mysql hibernate rest jdbc

假设有一个实体

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/

相关文章:

java - Hibernate EHCache 程序的问题

bash - 使用 AWS 签名版本 4 的 REST API 调用(无法签署 AWS API 请求)

javascript - 如何将 Node.js REST API 部署到生产模式

database - CouchDB - 一步创建一个带附件的文档?

c# - 使用 insert last_insert_ID 在 mysql 数据库中插入行

MySQL - 动态数据透视表分组问题

mysql - addnew 之后记录集更新时出错,表示即使默认设置为空字符串,列也不能为空

java - Hibernate错误分离实体传递到持久化

mySQL语句获取最后一条记录

java - 使用JPA将arraylist存储在mysql数据库中