Hibernate + Postgres:性能不佳的简单查询

时间:2015-08-11 07:03:11

标签: performance hibernate postgresql

在我的JavaEE webapplication中,我正在查询postgres数据库以获取员工假期的数据。 表holiday包含以下列:

  • id bigint NOT NULL
  • 开始时间戳,没有时区NOT NULL
  • 结束没有时区的时间戳NOT NULL
  • employee_id bigint(FK引用表employee的PK,已编入索引)
  • 其他一些似乎与我的问题无关的专栏。这里的数据不多。

目标:查找特定员工在给定时间间隔内的任何假期条目(不一定完全,即2009-12-30至2010-01-05的假期是有效的结果,寻找2010-01-01至2010-01-31的假期。

那就是说,我的命名查询是:

SELECT 
    h 
FROM 
    Holiday h 
WHERE 
    h.employee.id = :employeeIdParam
AND (
        h.end BETWEEN :fromParam AND :toParam
    OR 
        h.start BETWEEN :fromParam AND :toParam
    )

使用hibernate执行查询需要大约400毫秒,从而导致总共只有2000行中的100个选定行。太久了,不是吗? (使用pgAdmin,需要~12ms。)

这里的问题是什么? (在本地计算机上运行 - 它不是连接问题)

使用Wildfly 9.0,Postgres 9.4,Hibernate 4.3.1。

更新

数据库日志:

select holiday0_.id as id1_70_, holiday0_.end as end3_70_, holiday0_.employee_id as emplo10_70_, holiday0_.start as star6_70_
from holiday holiday0_ where holiday0_.employee_id=$1 and (holiday0_.end between $2 and $3 or holiday0_.start between $4 and $5)",
"Parameter: $1 = '2757', $2 = '2003-07-01 00:00:00', $3 = '2015-08-11 23:59:59', $4 = '2003-07-01 00:00:00', $5 = '2015-08-11 23:59:59'"

0 个答案:

没有答案