在处理演示项目时,我坚持使用基于Spring Data JPA方法的查询。我想在名称或地址字段中搜索包含我的搜索小组的top 5
个结果。
我的存储库方法是:
findTop5ByNameContainingIgnoreCaseOrAddressContainingIgnoreCase(String name,
String address);
我只是想知道它是实现结果的最优化方式还是可以进一步优化以提高性能?
答案 0 :(得分:2)
方法:
findTop5ByNameContainingIgnoreCaseOrAddressContainingIgnoreCase(String name, String address);
生成类似(Sql Server示例)的SQL:
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);