我有一个看似无辜的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
关于如何找到瓶颈的任何建议?谢谢!
迪利普
答案 0 :(得分:2)
首先,我们需要知道contentAccess.member.id
包含哪些内容作为查询。
其次,检查您是否正在使用批量加载(如果没有可能有21个查询被触发)..对成员表中的每个相关记录加上原始查询的一个查询。
您还可以尝试修改查询以使用joins
,这可以提高性能。
说了所有这些......如果我们能够掌握被解雇的查询和引用的pojos的映射,我们可以给你一个(可能)更好的解决方案。