Hibernate性能调优

时间:2012-03-07 13:51:13

标签: hibernate performance

我有大约1000个不同的ID,我需要多次运行下面的 hibernate 查询。根据检索到的记录(记录不需要存在),我在进入另一个表之前做了一些处理。

这里的问题是检索记录的整个过程大约需要20-25秒。这是正常的吗?是否可以进一步调整查询以缩短时间?

(将对每个id执行以下hibernate查询)

String query = "select emp from Employee emp where emp.id = '"+id"' and emp.status.statusCd = 'A'";

注意:Employee是一个包含大约30列的表。 status_cd和id是VARCHAR。

1 个答案:

答案 0 :(得分:4)

首先,永远不要使用字符串连接来设置SQL中的变量字段。

String queryString = "select emp from Employee emp where emp.id = :id and emp.status.statusCd = 'A'";
Query query = Session.createQuery(queryString);
query.setInteger("id", 168);

其次,您可以尝试使用一个查询获取所有目标记录docs

String queryString = "select emp from Employee emp where emp.id in (:id) and emp.status.statusCd = 'A'";
Query query = Session.createQuery(queryString);
Collection<Integer> idList = new ArrayList<Integer>();
query.setParameterList("id", idList);

然后,您将遍历此查询的结果并处理之前处理过的每条记录。

第三,如果您在处理每条记录时执行其他SQL,那么您还应该收集它们并在batch中执行它们。