【问题标题】:Spring Data JPA query 4 time faster with java.sql.Date than java.util.Date使用 java.sql.Date 的 Spring Data JPA 查询比 java.util.Date 快 4 倍
【发布时间】:2020-04-05 23:35:30
【问题描述】:

我第一次使用java.sql.Date 创建了一个常规实体。之后,我将导入更改为java.util.Date,我发现查询比以前花费了更多时间。 我开始调查这个问题,我意识到如果我将@Temporal(TemporalType.DATE) 添加到java.util.Date,它会再次变得更快。 这种行为很奇怪,因为在这两种情况下,0 值都是从数据库中获取的,所以我们不能说它是由于实体的 Date 转换而发生的。 我们使用的是Oracle数据库,对应的日期列有DATE数据类型。

  • java.util.Date:30-35 秒
  • java.sql.Date:7-8 秒

您是否知道在java.util.Date 的情况下会导致这种缓慢的原因是什么?

【问题讨论】:

  • 我坚信这是因为java.util.Date 本身有一个时间组件,而java.sql.Date 没有
  • 我也有同样的感觉,但是如果获取了零行,为什么它很重要?
  • 由于您没有说查询的初始时间是多少/增加了多少,因此无法判断其是否合理。如果查询仍然低于 1 秒,我不会考虑它。它可能有很多很多原因。如果不深入研究 hibernate 或 oracle 端的类型处理,可能无法将其固定

标签: java hibernate spring-boot spring-data-jpa


【解决方案1】:

总结一下,

java.sql 包包含与SQL 标准定义的类型一致的JDBC 类型。

java.util.Date 类型包含日期和时间信息,精确到毫秒。但它与任何SQL 类型都没有直接关系。

所以,除非绝对必要,否则我不会太担心性能。

【讨论】:

  • 在我们的例子中,性能至关重要,所以这就是我关注它的原因。在这两种情况下,应用程序都运行良好,只是使用 util 版本时速度要慢得多,即使没有从数据库中检索到数据。我有一种强烈的感觉,当 Spring Data JPA 存储库构建查询时,它依赖于不同的实体属性类型,并且在查询创建期间会增加性能开销。
猜你喜欢
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2015-08-04
  • 2018-09-23
相关资源
最近更新 更多