问题描述
在PostgreSQL中,我需要定义一个查询,该查询将根据参数有条件地SELECT
一些数据。在此语句中,我有一个条件,只有在另一个条件的评估结果为TRUE
时,才需要评估。
要解决此问题,我的第一个想法是在CASE
内使用WHERE
,效果很好。例如,使用具有列test_table
,id
和name
的表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 (将#修改为@)