gpt4 book ai didi

带有 Postgres 的 Spring Boot 应用程序 : indexes not being used during first use

转载 作者:行者123 更新时间:2023-11-29 13:54:23 25 4
gpt4 key购买 nike

我有一个使用 Postgres 数据库的 Spring Boot 应用程序。部署应用程序后,我需要运行一个事务性操作来上传一个用于填充数据库的 zip 文件。应用程序在插入重复行之前检查它们(因为用户可以上传应该忽略的重复数据)。

我遇到的问题是,我第一次上传文件时,即使创建了索引,在检查行是否存在时也没有使用它们。我的理论是,发生这种情况是因为查询计划决定不使用索引,因为它正在检查原始统计信息,这表明表是空的。如果我先上传一个小的 zip 文件,那么问题就会消失,因为表格现在有数据了。

我有两个问题。首先,我的理论是正确的还是有其他原因导致这种行为?另外,如果是这样,有没有办法强制 Postgres 在同一事务中以某个预定义的时间间隔更新它使用的查询计划,这可以使用 JPA 完成吗?任何想法表示赞赏。

最佳答案

以防万一有人遇到这个问题,我会发布我找到的解决方案。看来我的理论是正确的。在收集到一些统计信息之前,查询不会使用索引。强制执行此操作的一种方法是在将多行数据写入数据库后调用 ANALYZE。您可以使用这样的 native 查询来执行此操作:

entityManager.createNativeQuery("ANALYZE "+ tbl).executeUpdate();

您可以将此调用包装在 try catch 中,并忽略在更改数据库引擎时可能发生的任何异常。我找不到以独立于数据库的方式执行此操作的方法,但这种方法工作正常,现在初始上传按预期执行。

关于带有 Postgres 的 Spring Boot 应用程序 : indexes not being used during first use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35076442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com