在 PostgreSQL 中使用重复条件会导致任何问题吗?
例如,我有一个带有客户 ID 的采购表,而我的框架在某些情况下会复制一个查找条件,如下例所示。
SELECT p.*
FROM purchases p
WHERE p.customer_id = 123
AND p.customer_id = 123;
或者
SELECT p.*
FROM purchases p
WHERE p.customer_id = 123
AND p.salesman = 456
AND p.departament = 789
AND p.customer_id = 123;
是的,这可能会导致错误的查询估计。如果 PostgreSQL 认为
WHERE p.customer_id = 123
会从表中返回 10% 的行,它会认为WHERE p.customer_id = 123 AND p.customer_id = 123
只会返回表的 1%,因为它没有意识到条件实际上是相同的,并且将它们视为统计上独立的。错误的估计会导致错误的计划选择和糟糕的表现。
也许在您的情况下这并不重要:PostgreSQL 对每个行计数估计设置了一个下限为 1,因此如果您的重复数据删除查询已经估计返回很少的行,则不会造成太大的伤害。
尝试使用
EXPLAIN
!根据我对 12.6 的测试,它取决于谓词:
所以在这种情况下,没有问题。行估计和成本是不变的。
可能这是因为涉及到索引,因为 ilike 谓词受此负面影响:
请注意成本的轻微增加和估计行数的减少。
我认为这也可能是版本敏感的,所以我建议使用您关心的谓词和模式检查您的版本。