↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
历史版本。 PostgreSQL 8.0 已结束支持。 请参阅 当前版本手册.

11.6. 操作符类 #

索引定义可以为索引的每一列指定一个操作符类。

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

操作符类确定索引针对该列使用哪些操作符。例如,建立在类型int4上的 B-树索引会使用int4_ops类;该操作符类包含针对以下类型的值的比较函数:int4。实际中,列数据类型的默认操作符类通常就足够了。之所以需要操作符类,主要是因为对于某些数据类型,可能存在不止一种有意义的索引行为。例如,可能希望按绝对值或实部对复数数据类型排序。可以为该数据类型定义两个操作符类,并在创建索引时选择合适的类。

除了默认操作符类之外,还有一些内置操作符类:

  • 操作符类text_pattern_ops、varchar_pattern_ops、bpchar_pattern_ops和name_pattern_ops分别支持类型text、varchar、char和name上的 B-树索引。它们与普通操作符类的区别在于,值是严格按字符逐个比较,而不是按照区域设置相关的排序规则比较。因此,如果服务器未使用标准“C”区域设置,这些操作符类就适用于涉及模式匹配表达式(LIKE或 POSIX 正则表达式)的查询。例如,你可以像这样为一个varchar列建立索引:

    CREATE INDEX test_index ON test_table (col varchar_pattern_ops);

    如果你确实使用 C 区域设置,那么可以转而创建一个带默认操作符类的索引,它同样可以用于模式匹配查询。还要注意,如果你希望涉及普通比较的查询也能使用索引,则应当创建一个带默认操作符类的索引。这类查询不能使用xxx_pattern_ops操作符类。同一列上可以创建多个使用不同操作符类的索引。

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

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.oprname 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;

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.