8.5. 函数索引

对于函数索引(functional index), 它是定义在一个函数的结果上的,这个函数对某一个表的一个或多 个字段进行操作。 函数索引可 以用于获得对那些基于函数调用结果数据的快速访问.

比如,做大小写无关比较的常用方法是使用函数 lower

SELECT * FROM test1 WHERE lower(col1) = 'value';

如果我们在 lower(column) 操作的结果上定义索引, 那么这个查询就可以使用索引∶

CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));

在索引定义里的函数可以接受更多个参数,但是这些参数 都必须是表的字段,而不能是常量.函数索引总是单字段 索引(也就是函数的结果),即使函数有多个输入域也如此; 不可能有包含函数调用的多字段索引.

小知识: 上面那段提到的约束可以很容易通过在索引定义中使用 客户化定义的函数,由该函数在内部计算任何我们需要的结果来绕开.