gpt4 book ai didi

SQL 性能,什么在 SELECT 和 WHERE 条件下执行得更快

转载 作者:行者123 更新时间:2023-11-29 11:53:52 24 4
gpt4 key购买 nike

更新:废话!它不是一个整数,它是可变的(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 条记录

示例数据是一个字符 varying(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 子句中使用不同的选项是否会提高性能?

最佳答案

我个人认为制造这种问题的人不应该被允许使用“性能”这个词。恕我直言,对数字字段(甚至可能是关键字段)内容的文本表示 的限制(如 WHERE 子句中的限制)表明设计不佳。

如果这是我的数据,我会在记录中添加一个标志字段,指示在查询 xyz 中需要/不需要。甚至可以将其放入单独的表格中。我更喜欢添加一个(冗余的?)列来创建基于 GW-basic-substring 垃圾的整个索引。

关于SQL 性能,什么在 SELECT 和 WHERE 条件下执行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7416814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com