【问题标题】:Spring Data JPA: Query OptimizationSpring Data JPA:查询优化
【发布时间】:2018-09-23 12:18:23
【问题描述】:

在处理演示项目时,我坚持使用基于 Spring Data JPA 方法的查询。我想搜索在名称或地址字段中包含我的搜索团队的 top 5 结果。

为此,我的存储库方法是:

findTop5ByNameContainingIgnoreCaseOrAddressContainingIgnoreCase(String name,
      String address);

我只是想知道这是实现结果的最优化方式还是可以进一步优化以提高性能?

【问题讨论】:

  • 别以为你可以做得更好
  • 您的意思是 SPRING DATA JPA。 JPA API 没有这种命名废话的方法。
  • 您可能会考虑为此使用@Query 注释,因为方法名称相当冗长,可能会使使用此函数的代码更难阅读。这也将使使用专为查询设计的适当语言来调整查询变得更加容易。

标签: java spring spring-data-jpa jpql


【解决方案1】:

方法:

findTop5ByNameContainingIgnoreCaseOrAddressContainingIgnoreCase(String name, String address);

生成类似 SQL(Sql Server 示例):

select top 5 e.* from Entity e 
WHERE UPPER(e.name) LIKE UPPER('%SomeName%') OR UPPER(e.address) LIKE UPPER('%SomeAddress%')

就 SQL 而言,这个查询已经非常简单了。

为了提高性能,您可以为这两个字段创建索引,或者为addressname 创建两个索引的新列,这两个列都已以大写形式保存。这样您就不必将地址和名称的每个信息都转换为大写并进行比较。

喜欢:

id | name | name_search | address    | address_search
1  | John | JOHN        | Street Abc | STREET ABC

还有查询:

findTop5ByNameSearchContainingOrAddressSearchContaining(
    String nameUpperCase, String addressUpperCase);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2016-10-05
    • 2012-05-18
    • 2015-08-04
    相关资源
    最近更新 更多