性能 - 使用 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的选择问题