休眠性能 [已关闭]
2022-09-03 17:05:21
我有问题,也许来自它认为愚蠢的人。休眠速度快吗?我在系统中使用它,这将对数据库进行大量查询。性能变得警觉。其他问题脱离了当前背景。什么会更好 - 许多简单的查询(具有单个表)或具有多个JOIN的查询较少?
用于前进阿尔乔姆的坦克
我有问题,也许来自它认为愚蠢的人。休眠速度快吗?我在系统中使用它,这将对数据库进行大量查询。性能变得警觉。其他问题脱离了当前背景。什么会更好 - 许多简单的查询(具有单个表)或具有多个JOIN的查询较少?
用于前进阿尔乔姆的坦克
根据我们的经验,休眠可以非常快。但是,可能存在许多特定于ORM工具的陷阱,包括:
List
Set
Hibernate 文档中的“提高性能”页面是开始了解这些问题和其他提高性能的方法的好地方。
首先,您可以做很多事情来加速Hibernate。查看这些高性能休眠提示文章,全面了解您可以采取哪些措施来加快数据访问层的速度。
对于“许多”查询,您将遇到典型的 N+1 查询问题。使用休眠加载实体,其中包含相关对象。使用 LAZY 联接,您将获得每条记录的单个查询。每个查询都通过网络到达数据库服务器,并返回数据。这一切都需要时间(打开连接,网络延迟,查找,数据吞吐量等)。
对于单个查询(带联接),查找和数据吞吐量大于多个查询。但是,您只能打开一次连接和网络延迟。因此,对于 100 个或更多查询,您的查找和数据吞吐量很小,但您将拥有 100 次(包括打开连接和网络延迟)。
单个查询需要 20 毫秒,而 100 个查询需要 1 毫秒。你做数学;)
如果它能增长到1000条记录。单个查询的性能影响很小,但 1000 个查询与 100 个查询的查询是 10 倍。因此,对于多个查询,您将大大降低性能。
使用 HQL 查询检索数据时,可以将 FETCH 添加到 JOIN 中,以便使用相同的查询(使用 JOIN)加载数据。
有关此主题的详细信息,请查看此休眠性能调优教程。