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 (cost=88716.84..88719.89 rows=822 width=64)
это намного больше, так как запрос сложный, но если я уберу часть кода, затраты на сортировку значительно упадут