PostgreSQL:为复合类型中的字段创建索引?
是否有可能在复合类型的某个字段上有索引?例如,假设我创建了一个类型
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.
复杂类型元素的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索引作为一个整体的复杂类型数组是有意义的,让你在其中搜索一个元素.但是您需要针对特定??类型的实现.这是一个list of examples in standard Postgres(除了对所有一维数组的基本支持). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |