PostgreSQL 7.4(是的升级)
所以在我的 WHERE 条件下,我有这个
AND CASE
WHEN "substring"(t."FieldID"::text, 0, 3) = '01'::text
OR "substring"(t."FieldID"::text, 0, 4) = '123'::text
OR "substring"(t."FieldID"::text, 0, 5) = '5555'::text
OR "substring"(t."FieldID"::text, 0, 6) = '44444'::text
OR "substring"(t."FieldID"::text, 0, 3) = '99'::text
THEN 1
ELSE 0
END = 1
替代语法,但成本没有变化
AND CASE
WHEN "substring"(t."FieldID"::text, 0, 3) = '01'::text THEN 1
WHEN "substring"(t."FieldID"::text, 0, 4) = '123'::text THEN 1
WHEN "substring"(t."FieldID"::text, 0, 5) = '5555'::text THEN 1
WHEN "substring"(t."FieldID"::text, 0, 6) = '44444'::text THEN 1
WHEN "substring"(t."FieldID"::text, 0, 3) = '99'::text THEN 1
ELSE 0
END = 1
寻找一种成本有效的方法来通过字符串的开头限制结果。因此,如果字符串以 01、123、5555、44444 或 99 开头,则将其添加到结果集中。
有什么想法吗?
注意:FieldID 被索引查看解释数据以查看查询中的瓶颈,当添加上述代码时,排序成本会上升并减慢数据集/结果的返回速度。
解释的输出:
Sort (cost=88716.84..88719.89 rows=822 width=64)
由于查询很复杂,还有很多,但是如果我删除部分代码,排序成本就会下降