在postgres中定义索引时定义运算符类的目的是什么?

时间:2018-01-21 22:31:56

标签: postgresql

例如

CREATE INDEX my_index_name
    ON public.my_table USING btree
    (my_column  int8_ops)
    TABLESPACE pg_default;

VS

CREATE INDEX my_index_name
    ON public.my_table USING btree
    (my_column)
    TABLESPACE pg_default;

有什么区别?

1 个答案:

答案 0 :(得分:5)

尽管我不喜欢逐字引用,但我认为the manual中所写的内容最正确,最简洁地描述了这一点,我怀疑自己能做得更好:

  

运算符类标识索引要使用的运算符   该专栏。例如,int4类型的B树索引会   使用int4_ops类;此运算符类包括比较   int4类型的函数。在实践中默认运算符   列的数据类型通常就足够了。 主要   拥有运算符类的原因是某些数据类型的原因   可能不止一个有意义的索引行为。例如,我们   可能希望按绝对值对复数数据类型进行排序   或者通过实际部分。我们可以通过定义两个运算符类来实现   数据类型,然后在制作时选择适当的类   指数。运算符类确定基本排序顺序(哪个   然后可以通过添加排序选项COLLATE,ASC / DESC和/或来修改   NULLS FIRST / NULLS LAST)。

至于您的示例,如果将my_column定义为类型int8,则将运算符类指定为int8_ops是没有意义的,因为这将是该类型的默认运算符。 / p>