更新:がらくた!整数ではなく、文字が変化します(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 の実行 (はい、アップグレード中です)
クエリを最適化しているのですが、ステートメントの SELECT または WHERE 句で 3 種類の式のいずれかを使用すると、パフォーマンスが向上するかどうかを知りたいと思っていました。
注: これらのスタイルの制約で実行されるクエリは、約 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. (正規表現)
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. (正規表現)
WHERE CASE
WHEN t."FieldID" ~ '^01'
THEN 1
ELSE 0
END = 1
SELECT で 1 つのオプションを使用し、WHERE 句で別のオプションを使用すると、パフォーマンスが向上しますか?