1

我的一个查询的性能出现问题,在使用 jprofiler 进行分析后,我确定 60% 的查询时间在 joda 的休眠库中,并调用了 nullSafeSet 和 nullSafeGet。我一辈子都想不通为什么它会花这么多时间在那里。

正在检索的域对象包含两个 DateTime 属性,这两个属性都可能为空。我正在执行的查询(需要 <1ms)对其中一个日期时间进行相等检查,以确保它为空并且在另一个日期上进行小于比较。Jprofiler 调用一次 nullSafeSet 并调用两次 nullSafeGet。nullSafeGet 执行总共需要 19.7 毫秒,而 nullSafeSet 需要 25.9 毫秒。nullSafeSet 调用并花费大部分时间的方法是java.sql.PreparedStatement.setTimestamp,对于 nullSafeGet 调用,时间花费在org.joda.time.convert.ConverterManager.

有没有人建议我如何改善这种情况?!

我不确定下面的屏幕截图是否有用,甚至是否清晰。这是 jprofiler 的输出,显示时间花费在哪里以及正在执行的查询。

在此处输入图像描述

4

0 回答 0