我有一个带cca的数据库表。 327 000个条目。 (SQL Server 2005,Hibernate 3)我必须生成一个查询该表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
对象,然后检索History
对象通过其id
?也许Hibernate
做同样的事情,这不是必要的,然后就没有什么可做的了。有什么想法吗?
答案 0 :(得分:1)
我认为首先检索主键不会对你有多大帮助。这只会增加您需要运行的查询数量(以及所需的时间)。
我宁愿查看报告,看看是否可以减少查询次数。 此外,如果您正在处理大量对象,我会考虑检索标量值而不是完整对象实例(与从数据库中检索普通值相比,Hibernate带来了开销)。
我还要确保所有表都已正确编入索引(测试查询并查看它们的执行方式)。
答案 1 :(得分:0)
还要确保你的关联(例如hist.user,hist.user.somethingElseYetAgain)懒得加载而不是急切。否则,您的查询将加入比所需更多的实例,并实例化实例而不是Object代理。
这可以在查询或映射级别指示。