【问题标题】:Which Hibernate Join operation is more efficient?哪种 Hibernate Join 操作效率更高?
【发布时间】:2013-07-09 14:03:01
【问题描述】:

以下哪个 HQL 查询计算速度更快,即更高效?

from Cat as cat
left join cat.kittens as kitten
with kitten.bodyWeight > 10.0

from Cat as cat
left join cat.kittens as kitten
where 
  kitten.bodyWeight > 10.0

【问题讨论】:

  • 它会产生不同的结果。第一个查询将返回所有猫。
  • 有什么区别?
  • 第一个将返回所有猫,因为外部连接中的with 不会减少结果集。第二个查询返回至少有一只比 10 重的小猫的所有猫。
  • 假设我使用了inner join,那该怎么办呢?
  • 我认为性能不会有任何差异。看一下执行计划。正如我在回答中已经解释的那样:它取决于底层 DBMS,与休眠无关。

标签: hibernate grails join grails-2.0


【解决方案1】:

HQL 查询的性能取决于底层数据库。 HQL 通过 hibernate 转换为 SQL。 SQL 被转换为执行计划并由 DBMS 进行优化。优化和性能还取决于数据库中的数据。

查看生成的 SQL 并对其进行分析。您可以查看 DBMS 生成的执行计划。这一切都独立于hibernate。

无法比较您的查询,它们不会产生相同的结果。通常,左外连接比内连接慢。

【讨论】:

猜你喜欢
  • 2019-11-22
  • 2021-05-10
  • 2019-03-14
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 2020-06-18
  • 2018-04-02
  • 1970-01-01
相关资源
最近更新 更多