Postgresql 过滤器复杂性研究

Postgresql 过滤器复杂性研究,postgresql,Postgresql,我有这样一个问题: SELECT var_2 FROM table_a WHERE var_1 IN (<Large list of values>); 选择变量2 来自表a 其中var_1 IN(); 假设表a有n行,并且大型值列表的长度为t,whcih小于n。那么这个查询的复杂性是什么O(n)、O(n*log(t))或O(n*t)我使用的是postgres 10 有时,将大型IN列表重写为针对值列表的联接,可以创建更好的执行计划 这样的查询: select column_

我有这样一个问题:

SELECT var_2 
FROM table_a 
WHERE var_1 IN (<Large list of values>);
选择变量2
来自表a
其中var_1 IN();

假设表a有
n
行,并且大型值列表的长度为
t
,whcih小于n。那么这个查询的复杂性是什么<代码>O(n)、O(n*log(t))或O(n*t)我使用的是postgres 10

有时,将大型IN列表重写为针对值列表的联接,可以创建更好的执行计划

这样的查询:

select column_2
from the_table
where column_1 in (1,2,3,4);
如果列表不包含重复值,则可以将上述内容重写为:

select t.column_2
from the_table t
  join ( 
    values (1),(2),(3),(4)
  ) as v(c1) on v.c1 = t.column_1

要找到答案,如果这改善了查询,您必须检查

您为什么关心?你想解决的问题是什么?查询是否会变慢?您是否在
var_1
上有索引(这是一列而不是“var”顺便说一句)我想优化我的查询,我多次看到这种模式。所以我对postgres如何处理这样的请求感兴趣。因为如果它能在O(n)次中解决它,我就不必多想了,但是我应该考虑写改进的查询。此外,我想更好地理解postgres查询优化。优化查询总是从看起来像是过早优化的案例开始。最理想的情况是,一个场景可能在另一个场景中处于次优状态。在出现问题之前不要进行优化。我也经常使用值列表,但我认为值得一提的是,值列表中的重复值会导致结果重复,这与in子句中的重复值不同。@Jeremy,这就是我为什么写“如果列表中不包含重复值”的原因。抱歉,我错过了。