Hibernate查询获取记录需要很长时间

时间:2014-01-28 15:34:14

标签: java sql spring oracle hibernate

我正在尝试从表中检索一组记录。我正在使用的查询是:

select * from EmployeeUpdates eu where eu.updateid>0 and eu.department = 'EEE' 

EmployeeUpdates表有大约2000万条记录。 'updateid'是主键,表中目前没有部门'EEE'的记录。但是查询花费了大量时间,因此Web服务调用正在超时。

目前我们只在“updateid”列上有索引。 'department'是我们期待'EEE'记录的新专栏。

我可以更快地检索结果进行哪些更改?

2 个答案:

答案 0 :(得分:0)

首先,你的sql无效,看起来你错过了两个条件之间的'和'。

我猜测所有更新ID都是正面的,作为主键,它们是唯一的,所以我怀疑eu.updateid> 0匹配每一行。这意味着它在技术上不是表空间扫描,而是基于索引的扫描,尽管如果该扫描在匹配索引后具有所有2000万行,您可能还有一个表空间扫描。您唯一能做的就是在部门字段中添加索引。根据这些数据的不同,您可以将它放在一个单独的表上,使用数字主键,然后将其作为外键存储在eu表中。这意味着您扫描了所有部门,然后获得与其相关的更新,而不是搜索特定部门的每个更新。

答案 1 :(得分:0)

我认为你应该考虑使用每子类表映射(更多这里:http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/inheritance.html#inheritance-tablepersubclass-discriminator)。您可以将部门作为鉴别器,然后您将拥有EEEEmployeUpdates和ECEmployeeUpdates类。您的查询可能会更改,然后只查询EEEEmployeeUpdates。