Postgres 绕过带有 100 多个值的 IN 子句的索引?

Jas*_*son 1 postgresql performance index execution-plan postgresql-performance

在另一个论坛上遇到了这个:

PG 对于IN查询中的值的限制为 100,之后不使用所述列上的索引。例如:SELECT ... WHERE IN (...)如果 IN 列表超过 100,则对 PK的典型查询将变成全表扫描。

我无法找到任何关于此的信息。PG 有没有这样的限制(我是这么想的),如果有,这个限制是多少?

我知道有时在临时表中使用大型子选择会更好,但是了解截止位置会很有帮助。

Erw*_*ter 5

我不知道查询计划器中的任何硬接线限制。快速测试证明它是错误的- 对于IN构造的两种变体,一种采用集合,另一种采用列表

db<>在这里摆弄

看到103 个元素的索引扫描了吗?

有关的:

有一个相关的限制:一个VARIADIC函数最多可以接受 100 个单独的参数。除此之外,还需要传递一个数组......

临时表定期提高性能的唯一情况是在继续之前在中间结果上创建有用的索引。否则,临时表通常(非常)慢。