性能 - 使用 Spring JPA Data 搜索具有 2000 万条记录的表

Posted

技术标签:

【中文标题】性能 - 使用 Spring JPA Data 搜索具有 2000 万条记录的表【英文标题】:Performance - Search a table with 20 million records using Spring JPA Data 【发布时间】:2021-06-18 18:33:44 【问题描述】:

我有一个需求,我需要使用带有通配符的名字在包含数百万条记录的表中搜索用户,并通过对它们进行升序排序来返回前 100 条记录。

我的查询执行超过 2 分钟,我的存储库如下所示,

List<User> findTop100ByFirstNameStartsWithOrderByFirstName(String firstName);

在 Spring 中有没有其他方法可以在不影响性能的情况下实现这一点。

【问题讨论】:

在 firstName 上建立索引 【参考方案1】:

由 explaining the SQL query 创建的 findTop100ByFirstNameStartsWithOrderByFirstName 存储库方法开始。如果 SQL 查询导致全表扫描,您可以考虑在 FirstName 列上创建索引以加快查询速度,因为它应该提供 high cardinality。

有不同的索引类型,每种都提供不同的权衡。索引不是免费的,它们的创建和维护会消耗数据库服务器资源。如果您的查询每月运行一次,则可能不值得。

如果上述内容对您没有意义,请阅读 Use The Index, Luke! 或任何其他解释数据库索引的文档。

【讨论】:

以上是关于性能 - 使用 Spring JPA Data 搜索具有 2000 万条记录的表的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA HIbernate 批量插入速度较慢

聊一聊:MyBatis和Spring Data JPA的选择问题

spring Data jpa 一对多关联 动态查询怎么写

spring data jpa自定义bean字段映射

使用spring-boot-starter-data-jpa 怎么配置使运行时输出SQL语句

Spring Boot 2.0.4整合Spring Data JPA和Druid,双数据源