我正在尝试从表中检索一组记录。我正在使用的查询是:
select * from EmployeeUpdates eu where eu.updateid>0 and eu.department = 'EEE'
EmployeeUpdates表有大约2000万条记录。 'updateid'是主键,表中目前没有部门'EEE'的记录。但是查询花费了大量时间,因此Web服务调用正在超时。
目前我们只在“updateid”列上有索引。 'department'是我们期待'EEE'记录的新专栏。
我可以更快地检索结果进行哪些更改?
答案 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。