java - Spring 数据JPA : Query Optimization

标签 java spring spring-data-jpa jpql

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

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

findTop5ByNameContainingIgnoreCaseOrAddressContainingIgnoreCase(String name,
      String address);

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

最佳答案

方法:

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);

关于java - Spring 数据JPA : Query Optimization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49811901/

相关文章:

java - 用于映射文件的多个位置的 Hibernate SessionFactoryBean

unit-testing - 不可能对 Spring Data JPA @Query 进行单元测试,真的吗?

Java - JPA 总是追加到查询

java - Spring Controller : bind query parameters to custom POJO fields

java - JPA @OneToMany : Returning only some values from map in a query

java - 准备多值国家 map

java - Java中没有参数的for循环

java - 从 MySQL 读取文本文件

java - 抽象类非抽象方法调用

java - 状态模式 : States as Hibernate singleton entities