我正在使用hibernate search 4.4开发一个Web应用程序。
调用 FullTextQuery 的 getResultList()时出现性能问题。
生成的查询在大约30毫秒内执行,但整个方法大约需要1秒才能执行。
查询将返回一个小集;约15项。
有没有人知道可能导致这种糟糕表现的原因,或者如何改善或解决这个问题。
如果您需要任何其他信息,请发表评论,以便我可以添加。
提前致谢
答案 0 :(得分:2)
从您的描述看起来Lucene Query看起来很快但数据库负载很慢。
FullTextQuery 通常执行两个阶段: - 执行Lucene查询 - 从数据库加载结果
除非您使用投影:在这种情况下,结果将从索引加载,您可以避免从数据库加载。 所以你可以use projections完全避免命中数据库,或者至少确认这个数据库加载缓慢的假设是正确的。
如果确认,则需要提高数据库的加载性能;你应该从Hibernate ORM启用SQL Logging来查看生成的查询是否不必要地复杂,例如加载的实体可能有太多关系标记为急切加载?或者也许可以通过数据库模式的索引来帮助您获得所需的查询。
或者你可以考虑启用二级缓存,在这些情况下,查找 ManyToOne 关系可能特别有效,其中“一”方面的总数不同的实体数量有限。数据库中。
关于Hibernate ORM通用性能的建议:尝试使用最新版本,因为最新版本可以从卓越的性能改进中受益。