nav*_*ige 7 postgresql indexing types
是否可以在复合类型的某个字段上有索引?例如,假设我创建了一个类型
CREATE TYPE complex AS (
r double precision,
i double precision
);
Run Code Online (Sandbox Code Playgroud)
并希望有一个(特别是哈希/ GIST/GIN)指数超过r一个i,这可能吗?
同样,是否有可能在数组字段的第一个,第二个,第三个......元素上有索引?
假设我使用complex[],是否可以在所有complex[0],包括所有complex[1],等等上有索引.
Erw*_*ter 24
是的,绝对可能.在表达式上使用索引.棘手的部分是复合类型的语法.
复杂类型元素的B树索引:
CREATE TABLE tbl (tbl_id serial, co complex);
CREATE INDEX tbl_co_r_idx ON tbl (((co).r)); -- note the parentheses!
Run Code Online (Sandbox Code Playgroud)
SQL拨弄用EXPLAIN ANALYZE.
同样的事情适用于数组的元素,即使对于复合类型的数组:
CREATE TABLE tbl2 (tbl2_id serial, co complex[]);
CREATE INDEX tbl2_co1_idx ON tbl2 ((co[1])); -- note the parentheses!
Run Code Online (Sandbox Code Playgroud)
请注意,表达式索引只能在表达式或多或少字面匹配时用于查询.
但是就像你提到的GIN索引那样没有意义.每个文件:
GIN代表广义倒置指数.GIN用于处理要编制索引的项目是复合值的情况,索引要处理的查询需要搜索复合项目中出现的元素值.
GIN索引对整个复杂类型的数组有意义,让你在其中搜索一个元素.但是您需要针对特定类型的实现.以下是标准Postgres中的示例列表(除了对所有一维数组的基本支持之外).
| 归档时间: |
|
| 查看次数: |
3975 次 |
| 最近记录: |