【问题标题】:Is there any performance difference between nativeQuery true/false in JpaRepository? [duplicate]JpaRepository 中的 nativeQuery true/false 之间是否存在性能差异? [复制]
【发布时间】:2019-12-24 18:29:52
【问题描述】:

正如documentation 中提到的,JpaRepository 让我们可以编写原生 SQL 查询。所以,我写了同一个查询的 2 个不同版本。

版本 1:

@Query(value = "SELECT b FROM branch AS b where b.companyId = ?1")
List<Branch> findByCompanyId(Long companyId);

版本 2:

@Query(nativeQuery = true, value = "SELECT * FROM branch where b.company_id = ?1")
List<Branch> findByCompanyId(Long companyId);

两个版本都输出相同的结果,我想知道这些方法之间是否存在性能差异?推荐哪种方法?最佳做法是什么?

【问题讨论】:

  • 好吧,在这种情况下,@Query 甚至没有必要,Spring Data 将从该方法推断出相同的 SQL 查询(我会默认使用该方法)。如果查询等效,则在大多数情况下性能应该相似。我认为在提供您自己的查询时没有明确的最佳实践;当您需要一些特定于供应商的数据库实用程序时,可以使用本机查询,我主要使用非本机版本,因为这样您就不必记住或检查实体中数据库列和属性之间的映射
  • 同意stackoverflow.com/users/8129075/srthompson 并且永远不要在查询中使用 *。如果添加了字段,则此查询会破坏您的应用程序。最好写一个表的所有字段
  • 感谢您的回复。

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


【解决方案1】:

如果我不得不猜测我会押注原生查询,因为 JPQL 查询(和派生查询)必须被翻译成原生查询。 所以还有一个额外的步骤。

但如果在您的环境中确实如此,则只能在您的环境中进行实验来决定。

与实际执行查询和转换结果的性能相比,它也很可能无关紧要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 2014-02-23
    • 2010-10-02
    • 2014-05-17
    • 1970-01-01
    • 2012-08-21
    • 2011-03-20
    • 2014-11-24
    相关资源
    最近更新 更多