更新:废话!它不是一个整数它的字符变化(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 子句中使用三种类型的表达式之一是否有任何性能提升。
注意:使用这些约束样式执行的查询返回大约 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 中使用一个选项并在 WHERE 子句中使用不同选项会提高性能吗?