ОБНОВЛЕНИЕ: Дерьмо! это не целое число, это разные символы (10)
При выполнении такого запроса используется индекс
SELECT t."FieldID"
FROM table t
WHERE t."FieldID" = '0123456789'
Но не использует индекс, если я выполню это
SELECT t."FieldID"
FROM table t
WHERE t."FieldID" LIKE '01%'
или это
SELECT t."FieldID"
FROM table t
WHERE "substring"(t."FieldID", 0, 3) = '01'
также это
SELECT t."FieldID"
FROM table t
WHERE t."FieldID" ~ '^01'
Мой индекс выглядит так
CREATE UNIQUE INDEX fieldid_index
ON "table"
USING btree
("FieldID");
Запуск PostgreSQL 7.4 (обновление Yep)
Я оптимизирую свой запрос и хотел узнать, есть ли какой-либо выигрыш в производительности, используя один из трех типов выражений в предложении SELECT или WHERE в выражении.
ПРИМЕЧАНИЕ. Запрос, который выполняется с этими ограничениями стиля, возвращает около 200 000 записей
Пример данных: символ варьируется (10) : 0123456789
и также индексируется
1. (Подстроки)
SELECT CASE
WHEN "substring"(t."FieldID"::text, 0, 3) = '01'::text
THEN 'Found Match'::text
ELSE NULL::text
END AS matching_group
2. (Как)
SELECT CASE
WHEN t."FieldID"::text LIKE '01%'
THEN 'Found Match'::text
ELSE NULL::text
END AS matching_group
3. (RegEx)
SELECT CASE
WHEN t."FieldID" ~ '^01'
THEN 'Found Match'::text
ELSE NULL::text
END AS matching_group
Также есть ли какие-либо преимущества в производительности при использовании одного над другим в предложении WHERE?
1. (Подстроки)
WHERE CASE
WHEN "substring"(t."FieldID"::text, 0, 3) = '01'::text
THEN 1
ELSE 0
END = 1
2. (Как)
WHERE CASE
WHEN t."FieldID"::text LIKE '01%'
THEN 1
ELSE 0
END = 1
3. (RegEx)
WHERE CASE
WHEN t."FieldID" ~ '^01'
THEN 1
ELSE 0
END = 1
Повысит ли использование одного параметра в SELECT и другого в предложении WHERE?