【发布时间】:2012-11-01 18:59:22
【问题描述】:
我需要根据特定列中的某些值从表中检索某些行,在示例中名为 columnX:
select *
from tableName
where columnX similar to ('%A%|%B%|%C%|%1%|%2%|%3%')
所以如果 columnX 包含至少一个指定的值(A、B、C、1、2、3),我将保留该行。
我找不到比使用类似于更好的方法。问题是对于超过一百万行的表,查询花费的时间太长。
我已经尝试过索引它:
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 中发布的主题)。
【问题讨论】:
-
您是否总是要搜索单字符值?像
'%ABC%|%BCD%'这样的查询可能吗? -
是的,是基于单字符的搜索。
-
@FedericoCristina 实际上,
columnX是由text字段中的单字符代码表示的集。正确的?这意味着columnX中值的顺序无关紧要。
标签: performance postgresql indexing