【问题标题】:Hql query optimization - return indexed id or the whole objectHql查询优化——返回索引id或整个对象
【发布时间】:2011-09-15 09:14:45
【问题描述】:

我有一个带有 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对象,然后通过它的id检索History对象?也许Hibernate 做同样的事情,这不是必需的,然后就没有什么可做的了。有什么想法吗?

【问题讨论】:

    标签: java sql-server hibernate hql


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      我宁愿看一下报告,看看是否可以减少查询数量。 此外,如果您正在处理大量对象,我会考虑检索标量值而不是完整的对象实例(与从数据库中检索纯值相比,Hibernate 会产生开销)。

      我还要确保所有表都已正确编入索引(测试查询并查看它们的执行情况)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 2012-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多