在我的JavaEE webapplication中,我正在查询postgres数据库以获取员工假期的数据。
表holiday
包含以下列:
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'"