在开发演示项目时,我坚持使用基于 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 而言,这个查询已经非常简单了。
为了提高性能,您可以为这两个字段创建索引,或者为 address
和 name
创建两个索引新列,两者都已以大写形式保存。这样您就不必将地址和姓名的每个信息都转换为大写并进行比较。
喜欢:
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/