PostgresSQL:在WHERE内部使用CASE的性能

问题描述

在PostgreSQL中,我需要定义一个查询,该查询将根据参数有条件地SELECT一些数据。在此语句中,我有一个条件,只有在另一个条件的评估结果为TRUE时,才需要评估。

要解决此问题,我的第一个想法是在CASE内使用WHERE,效果很好。例如,使用具有列test_tableidname的表value

SELECT 
    name
FROM test_table
WHERE
    CASE
        WHEN $1 > 10 THEN test_table.value > $1
        ELSE TRUE
    END
;

但是,其他同行建议改用常规布尔逻辑,因为这样做会更快。例如:

SELECT 
    name
FROM test_table
WHERE
    (
        $1 <= 10
        OR test_table.value > $1
    )
;

在测试了大约10万行并使用EXPLAIN ANALYSE之后,速度差异似乎平均在大约1毫秒之间:

  • 使用CASE:执行时间约为19.5ms
  • 使用常规布尔值:〜18.5ms执行时间

问题是:第二种方法真的更快吗?还是我的测试有缺陷,因此结果不正确?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)