java - 什么方法加入实体更快?

标签 java hibernate postgresql jpa jpql

以下是检索等效数据的两个查询:

SELECT DISTINCT packStatus
  FROM PackStatus packStatus JOIN FETCH packStatus.vars, ProcessEntity requestingProcess
    WHERE
      packStatus.status.code='OGVrquestExec'
      AND packStatus.procId=requestingProcess.activityRequestersProcessId
      AND requestingProcess.id='1000323733_GU_OGVProc'

SELECT DISTINCT packStatus
  FROM PackStatus packStatus JOIN FETCH packStatus.vars
    WHERE
      packStatus.status.code='OGVrquestExec'
      AND packStatus.procId=(SELECT requestingProcess.activityRequestersProcessId FROM ProcessEntity requestingProcess WHERE requestingProcess.id='1000323733_GU_OGVProc')

这些查询的不同之处在于 requstingProcesspackStatus 连接的方法。总的来说,这两种方法在性能方面更优选?我在 Postgres 8.4 上使用 Hibernate 3.3 提供的 JPA 1.2。

UPD:我已将虚假查询替换为应用程序中的真实查询。这是 Hibernate 为 first 生成的 SQL和 second询问。查询计划链接:first , second 。查询计划看起来非常相似。唯一的区别是 bpms_process 表中的数据聚合到查询结果的时刻。但我不知道对这些结果进行概括是否正确?对于仅连接方法不同的查询,查询计划是否几乎相同?通过改变连接方法是否可以使查询成本有很大的差异?

最佳答案

使用EXPLAIN ANALYZE并查看。

如果它们变成相同的查询计划,我不会感到惊讶。

参见:https://stackoverflow.com/tags/postgresql-performance/info

关于java - 什么方法加入实体更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13405230/

相关文章:

Java:日期和偏移量问题?

java - 如何迭代两个列表并比较其中的项目?

java - 具有动态方案的 Jpa

mysql - Postgresql SERIAL 的工作方式是否不同?

java - 如何比较 mongoDB spring 数据中的两个字符串?

java - 在 Controller 外部获取 JPA 事务 - Play Framework

java - 通过 Smack 4.2.0 进行 XMPP 连接时出现 NullPointerException

java - Hibernate:合并parentEntity时childEntity null id

java - 我可以在不破坏我的自动化测试的情况下在 Hibernate 中映射一个表和同一个表的 View 吗?

python - 如何在 django 测试设置中创建 postgresql 扩展