优化Hibernate session.createQuery()。list();

时间:2013-10-05 17:22:10

标签: java mysql hibernate query-optimization pojo

我们有一个包含120,000行的用户表(MySQL)

List<User> users = session.createQuery("from User").list();

这个hibernate查询大约需要6到9秒才能执行。我们怎样才能优化这个? MySQL是否是瓶颈?或.list()通常这么慢?

2 个答案:

答案 0 :(得分:1)

在查询中使用分页。您不应该一次调用所有行。您可以设置结果的第一个位置和最大结果。例如,如果您想要读取前100个结果而不是更改您的查询,请执行以下操作:

Query q=session.createQuery("from User");
q.setFirstResult(fistRes);// this will variable
q.setMaxResults(maxRes);// this will also be variable as parameter.

答案 1 :(得分:1)

当然,它很慢,因为查询执行全表扫描。您应该加入与其关联的其他对象,包括查询的where子句,可以更改查询以返回有限数量的记录或使用标准API和投影。