【发布时间】:2020-11-10 12:53:48
【问题描述】:
我正在尝试使用 JPA 本机查询和 PostgreSQL 搜索包含数百万条记录的连接表,但结果太慢。我想在 postgres 上使用索引搜索或任何可以建议的更好的选项来使其更快。我在网上查了几篇这样的文章: https://hashrocket.com/blog/posts/exploring-postgres-gin-index
但我不太确定如何实现它,因为速度没有提高。
这是我的 JPA 存储库中的内容:
@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);
这是我尝试使用索引搜索做的事情(我是使用索引搜索的新手):
@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);
请帮助我提出您的建议、想法和解决方案。
【问题讨论】:
-
你是否在数据库级别添加了外键约束
-
连接中的两个表都有外键关系。所以在外键约束可用的数据库上。但是我在尝试执行此索引时没有添加任何外键约束。
-
相同的查询是否仅在 DB 端执行得更好?我的意思是如果你不通过 Java 执行它。
-
不,它不会......它就像没有创建索引@sigur 一样慢
-
我的意思是创建表时是否创建了外键约束@kingified
标签: java postgresql indexing spring-data-jpa