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 にはインデックスが付けられます。Explain データを表示してクエリのボトルネックを確認します。上記のコードを追加すると、Sort のコストが大幅に上昇し、データ セット/結果の戻りが遅くなります。
Explain からの出力:
Sort (cost=88716.84..88719.89 rows=822 width=64)
クエリが複雑であるため、さらに多くのコードがありますが、コードの一部を削除すると、並べ替えのコストが大幅に削減されます