Java Hql查询优化-返回索引id或整个对象

Java Hql查询优化-返回索引id或整个对象,java,sql-server,hibernate,hql,Java,Sql Server,Hibernate,Hql,我有一个cca的数据库表。327000份参赛作品。(SQLServer2005,Hibernate3)我必须生成一个查询此表300次的报告。Hql查询如下所示: select hist from HistoryTable hist where year(hist.date) = :year and hist.user.userId = :userId and hist.entryType = :created 我需要等待3分钟才能生成报告,那么有没有办法优化此查询以更快地运行

我有一个cca的数据库表。327000份参赛作品。(SQLServer2005,Hibernate3)我必须生成一个查询此表300次的报告。Hql查询如下所示:

select hist from HistoryTable hist where year(hist.date) = :year and 
        hist.user.userId = :userId and hist.entryType = :created
我需要等待3分钟才能生成报告,那么有没有办法优化此查询以更快地运行?
我想返回
hist.id
(因为这是一个主键,所以它被索引了,我想它被查找得更快)而不是整个
hist
对象,然后通过它的
id
检索
History
对象?也许
Hibernate
也做同样的事情,这不是必需的,然后就没有什么可以做了。有什么想法吗?

我认为先检索主键对您没有多大帮助。这只会增加您需要运行的查询数量(以及所需的时间)

我宁愿看一下报告,看看是否可以减少查询的数量。 此外,如果您处理大量对象(Hibernate与从数据库中检索纯值相比,Hibernate有开销),我会考虑检索标量值而不是完整对象实例。p>
我还要确保所有的表都被正确地索引(测试查询并查看它们的执行情况)。

我认为首先检索主键对您没有多大帮助。这只会增加您需要运行的查询数量(以及所需的时间)

我宁愿看一下报告,看看是否可以减少查询的数量。 此外,如果您处理大量对象(Hibernate与从数据库中检索纯值相比,Hibernate有开销),我会考虑检索标量值而不是完整对象实例。p>
我还要确保所有表都被正确索引(测试查询并查看它们的执行情况)。

还要确保您的关联(例如hist.user、hist.user.somethingelseytagain)被延迟加载,而不是急于加载。否则,您的查询将加入比需要更多的内容,并实例化实例而不是对象代理


这可以在查询或映射级别进行指示。

还要确保您的关联(例如hist.user、hist.user.somethingElseYetAgain)是延迟加载的,而不是急切加载的。否则,您的查询将加入比需要更多的内容,并实例化实例而不是对象代理

这可以在查询或映射级别指示