gpt4 book ai didi

performance - 使用 'similar to' 在 PostgreSQL 中查询性能

转载 作者:行者123 更新时间:2023-11-29 11:40:49 25 4
gpt4 key购买 nike

我需要根据特定列中的某些值从表中检索某些行,在示例中名为 columnX:

select *
from tableName
where columnX similar to ('%A%|%B%|%C%|%1%|%2%|%3%')

因此,如果 columnX 包含至少一个指定值(A、B、C、1、2、3),我将保留该行。

我找不到比使用similar to 更好的方法了。问题是对于超过一百万行的表,查询时间太长。

我试过索引它:

create index tableName_columnX_idx on tableName (columnX) 
where columnX similar to ('%A%|%B%|%C%|%1%|%2%|%3%')

但是,如果条件是可变的(值可能不是 A、B、C、1、2、3),我需要为每个条件使用不同的索引。

这个问题有没有更好的解决方案?

编辑:感谢大家的反馈。看起来我已经达到这一点可能是因为设计错误(我在 separated question 中发布的主题)。

最佳答案

如果您只想搜索一个字符值的列表,则将每个字符串拆分为一个字符数组并为该数组建立​​索引:

CREATE INDEX
ix_tablename_columnxlist
ON tableName
USING GIN((REGEXP_SPLIT_TO_ARRAY(columnX, '')))

然后根据索引搜索:

SELECT  *
FROM tableName
WHERE REGEXP_SPLIT_TO_ARRAY(columnX, '') && ARRAY['A', 'B', 'C', '1', '2', '3']

关于performance - 使用 'similar to' 在 PostgreSQL 中查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13183735/

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