是否有可能在复合类型的某个字段上有索引?例如,假设我创建了一个类型
CREATE TYPE complex AS ( r double precision,i double precision );
并且希望在r上有一个(特别是Hash / GIST / GIN)索引而在i上有一个,这可能吗?
同样,是否有可能在数组字段的第一个,第二个,第三个……元素上有索引?
假设我使用complex [],是否可以在所有复数[0],所有复数[1]等上都有索引.
是的,绝对可能.使用
index on an expression.棘手的部分是
syntax for composite types.
原文链接:https://www.f2er.com/postgresql/191961.html复杂类型元素的B树索引:
CREATE TABLE tbl (tbl_id serial,co complex); CREATE INDEX tbl_co_r_idx ON tbl (((co).r)); -- note the parentheses!
SQL Fiddle使用EXPLAIN ANALYZE.
同样的事情适用于数组的元素,即使对于复合类型的数组:
CREATE TABLE tbl2 (tbl2_id serial,co complex[]); CREATE INDEX tbl2_co1_idx ON tbl2 ((co[1])); -- note the parentheses!
请注意,表达式索引只能在表达式或多或少字面匹配时用于查询.
但是就像你提到的GIN指数那样没有意义. Per documentation:
GIN stands for Generalized Inverted Index. GIN is designed for
handling cases where the items to be indexed are composite values,and
the queries to be handled by the index need to search for element
values that appear within the composite items.
GIN索引作为一个整体的复杂类型数组是有意义的,让你在其中搜索一个元素.但是您需要针对特定类型的实现.这是一个list of examples in standard Postgres(除了对所有一维数组的基本支持).