一个看似简单的Hibernate查询需要15-18秒

时间:2011-10-10 20:53:47

标签: java mysql hibernate

我有一个看似无辜的Hibernate查询:

public List<ContentAccess> getByMemberId(
Integer memberId
) {
List<ContentAccess> contentAccess = 
getHibernateTemplate().findByNamedQuery(
"contentAccess.member.id", 
memberId
);
return contentAccess;
}

contentAccess表有大约20条记录,成员表也有大约20条记录,但是当为20个成员中的每一个执行上面提到的命名查询时,需要15-18秒!

环境是:Windows,JDK 1.5.0_09,Hibernate 3,MySQL 5.5

关于如何找到瓶颈的任何建议?谢谢!

迪利普

1 个答案:

答案 0 :(得分:2)

首先,我们需要知道contentAccess.member.id包含哪些内容作为查询。

其次,检查您是否正在使用批量加载(如果没有可能有21个查询被触发)..对成员表中的每个相关记录加上原始查询的一个查询。

您还可以尝试修改查询以使用joins,这可以提高性能。

说了所有这些......如果我们能够掌握被解雇的查询和引用的pojos的映射,我们可以给你一个(可能)更好的解决方案。