我对这个一无所知。我有一个相当大的查询,如下所示:
SELECT *
FROM some_table
WHERE some_id IN (hundreds, perhaps even thousands of ids)
出于某种原因,虽然此查询对于大多数用户来说运行得相当快,但我们有一两个帐户运行速度太慢,以至于遇到超时错误 (Heroku)。我认为它一定与这些用户的特定数据有关,但是,当我将生产数据库的副本放在临时服务器上时,这些相同的查询运行得很快(< 2 秒)。我也在本地机器上测试了数据,效果是一样的:快。
所有三个环境都运行 Postgres 11。我一辈子都无法弄清楚是什么原因造成的。
有什么想法吗?
最佳答案
如果您的查询结果是“数百个,甚至数千个 id”,那么您可以避免使用 in 子句并使用内部联接
SELECT *
FROM some_table
INNER JOIN (
select id from my_table /* for hundreds, perhaps even thousands of ids */
) t on t.id = some_table.some_id
并确保表 some_table 列 some_id 上有正确的索引
关于sql - Postgres 查询在生产环境中速度较慢,但在临时环境和本地环境中都较快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497387/