首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring Data、Jpa和postgres中使用索引使原生查询更快

如何在Spring Data、Jpa和postgres中使用索引使原生查询更快
EN

Stack Overflow用户
提问于 2020-11-10 20:53:48
回答 1查看 168关注 0票数 0

我尝试使用JPA原生查询和PostgreSQL搜索包含数百万条记录的连接表,但结果太慢。我想让它更快使用索引搜索postgres或任何更好的选择,可以建议。我在网上查找了几篇这样的文章:https://hashrocket.com/blog/posts/exploring-postgres-gin-index

但我不太确定如何实现它,因为我没有得到提高的速度。

以下是我的JPA存储库中的内容:

代码语言:javascript
复制
 @Query(value = "SELECT DISTINCT C.APPROVED_NAME AS companyName, C.CITY AS city, C.STATE AS state, 
FROM TABLE_NAME_1 C LEFT JOIN TABLE_NAME_2 AS A ON A.COMPANY_FK = C.ID 
WHERE CONCAT(UPPER(A.FIRSTNAME), ' ', UPPER(A.SURNAME))
 LIKE UPPER(concat(:searchTerm,'%')) ", nativeQuery = true)
    List<table_1_Interface> findByName(@Param("searchTerm") String searchTerm);

下面是我尝试使用索引搜索所做的事情(我对使用索引搜索还很陌生):

代码语言:javascript
复制
 @Query(value = "CREATE INDEX company_search_idx ON TABLE_NAME_2(firstname, surname );
SELECT DISTINCT C.APPROVED_NAME AS companyName, C.CITY AS city, C.STATE AS state, 
FROM TABLE_NAME_1 C LEFT JOIN TABLE_NAME_2 AS A ON A.COMPANY_FK = C.ID 
WHERE CONCAT(UPPER(A.FIRSTNAME), ' ', UPPER(A.SURNAME))
 LIKE UPPER(concat(:searchTerm,'%')) ", nativeQuery = true)
    List<table_1_Interface> findByName(@Param("searchTerm") String searchTerm);

请帮助我与您的建议,想法和解决方案。

EN

回答 1

Stack Overflow用户

发布于 2020-11-10 22:35:06

如果您在CONCAT(UPPER(A.FIRSTNAME), ' ', UPPER(A.SURNAME))上进行搜索,那么就需要在此基础上构建索引(但不包括表别名)。但对于pg_trgm,它直接支持ILIKE,所以你可以直接使用它,而不是手动摆弄大小写。

由于只将%添加到搜索词的末尾,因此可以使用带有text_pattern_ops的btree索引。但这样你就需要用LIKE做鞋面了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64769306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档