如何在postgresql中添加前缀长度索引?

时间:2014-02-17 08:20:28

标签: postgresql

众所周知,在索引创建过程中可以添加前缀长度列。例如在mysql中,

alter table j1 add index idx_j1_str1 (str1(5)); 

在搜索google.com和stackoverflow.com后,我在postgresql中找不到任何等效的解决方案。

那么除了postgresql中的函数索引之外,还有谁可以告诉我答案。

任何回复都将不胜感激。

1 个答案:

答案 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%'

或使用通配符的任何其他前缀搜索。