Hibernate在调用FullTextQueryImpl.getResultList()时搜索性能不佳

时间:2014-10-17 13:50:44

标签: performance hibernate lucene hibernate-search

我正在使用hibernate search 4.4开发一个Web应用程序。

调用 FullTextQuery getResultList()时出现性能问题。

生成的查询在大约30毫秒内执行,但整个方法大约需要1秒才能执行。

查询将返回一个小集;约15项。

有没有人知道可能导致这种糟糕表现的原因,或者如何改善或解决这个问题。

如果您需要任何其他信息,请发表评论,以便我可以添加。

提前致谢

1 个答案:

答案 0 :(得分:2)

从您的描述看起来Lucene Query看起来很快但数据库负载很慢。

FullTextQuery 通常执行两个阶段:   - 执行Lucene查询   - 从数据库加载结果

除非您使用投影:在这种情况下,结果将从索引加载,您可以避免从数据库加载。 所以你可以use projections完全避免命中数据库,或者至少确认这个数据库加载缓慢的假设是正确的。

如果确认,则需要提高数据库的加载性能;你应该从Hibernate ORM启用SQL Logging来查看生成的查询是否不必要地复杂,例如加载的实体可能有太多关系标记为急切加载?或者也许可以通过数据库模式的索引来帮助您获得所需的查询。

或者你可以考虑启用二级缓存,在这些情况下,查找 ManyToOne 关系可能特别有效,其中“一”方面的总数不同的实体数量有限。数据库中。

关于Hibernate ORM通用性能的建议:尝试使用最新版本,因为最新版本可以从卓越的性能改进中受益。