众所周知,在索引创建过程中可以添加前缀长度列。例如在mysql中,
alter table j1 add index idx_j1_str1 (str1(5));
在搜索google.com和stackoverflow.com后,我在postgresql中找不到任何等效的解决方案。
那么除了postgresql中的函数索引之外,还有谁可以告诉我答案。
任何回复都将不胜感激。
答案 0 :(得分:3)
create index idx_j1_str on j1 (left(str1,5));
但我认为你在Postgres中不需要这样的东西。仅str1
的索引可能更加通用。但当然这在很大程度上取决于你运行的查询 - 你没有告诉我们,所以不可能说你真正需要什么样的索引。
要在Postgres中使用基于函数的索引(以及基本上支持它们的任何其他DBMS),您的查询需要包含与索引中使用的表达式相同的表达式:
select *
from j1
where left(str1,5) = '1234'
将使用上述索引(如果有意义,例如,如果表格足够大且条件会大大降低整体结果)。
如果您在该列上创建常规索引:
create index idx_j1_str on j1 (str1 varchar_pattern_ops);
然后它可以用于:
select *
from j1
where str1 like '1234%'
(相当于left(str1,5) = '1234'
)但也可用于:
select *
from j1
where str1 like '1234678%'
或使用通配符的任何其他前缀搜索。