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

Jal*_*Jal 2 postgresql

例如

CREATE INDEX my_index_name
    ON public.my_table USING btree
    (my_column  int8_ops)
    TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)

VS

CREATE INDEX my_index_name
    ON public.my_table USING btree
    (my_column)
    TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)

有什么不同?

e_i*_*_pi 5

尽管我不喜欢逐字引用,但我认为手册中的内容最正确,最简洁地描述了它,我怀疑我能做得更好:

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


至于你的例子,如果my_column被定义为类型int8,那么指定运算符类int8_ops是没有意义的,因为那将是该类型的默认运算符.

  • 完美的答案。我认为,引用实际上*提高了*质量。 (2认同)