PostgreSQL 8.2.3 中文文档
后退快退章11. 索引快进前进

11.8. Operator Classes

定义索引的同时可以为索引的每个字段声明一个操作符类

CREATE INDEX name ON table (column opclass [, ...]);

这个操作符类指明该索引用于该字段时要使用的操作符。例如,一个在 int4 上的 B-tree 索引将使用 int4_ops 类;这个操作符类包括用于 int4 的比较函数。实际上,字段类型的缺省操作符通常就足够了。拥有操作符类的主要原因是:对于某些数据类型,可能存在多个有意义的索引行为。例如,我们可能想排序两个复数,既可能通过绝对值,也可能通过实部。我们可以通过为该数据类型定义两个操作符类,然后在建立索引时选择合适的那个。

除了缺省的以外,还有一些有内置的操作符类:

下面的查询显示所有已定义的操作符类:

SELECT am.amname AS index_method,
       opc.opcname AS opclass_name
    FROM pg_am am, pg_opclass opc
    WHERE opc.opcamid = am.oid
    ORDER BY index_method, opclass_name;

我们可以把它扩展为显示每个表中的所有操作符:

SELECT am.amname AS index_method,
       opc.opcname AS opclass_name,
       opr.oid::regoperator AS opclass_operator
    FROM pg_am am, pg_opclass opc, pg_amop amop, pg_operator opr
    WHERE opc.opcamid = am.oid AND
          amop.amopclaid = opc.oid AND
          amop.amopopr = opr.oid
    ORDER BY index_method, opclass_name, opclass_operator;

后退首页前进
部分索引上一级检查索引的使用