【发布时间】:2019-09-24 20:56:37
【问题描述】:
我有查询(简化版):
WITH temp AS (SELECT id, foo(id) AS foo FROM test)
SELECT id FROM temp WHERE foo = 4;
foo(id) 是返回 0、2 或 4(仅这些值)的函数
使用... WHERE foo = 4 进行上述查询需要几分钟,但令人惊讶的是,当我更改为... WHERE foo != 0 AND foo != 2 时,查询性能是毫秒。
... WHERE foo > 2 也一样 - 也超级快。
我检查了执行计划,但没有发现任何差异。
对此感到非常惊讶......有人可以解释一下为什么吗?
【问题讨论】:
-
这是一个函数。规划者不知道会发生什么。
-
好的,同意 - 但是这对 foo = 4 与 foo > 2 有何影响,在这两种情况下它都不知道。
-
这个问题对于实际的函数和表定义、您的 Postgres 版本以及实际的查询计划会更有用。
标签: sql postgresql performance indexing postgresql-performance