加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – PostgreSQL可以索引数组列吗?

发布时间:2020-12-13 16:54:06 所属栏目:百科 来源:网络整理
导读:我在文档中找不到这个问题的确切答案。如果一个列是一个数组类型,所有输入的值是否将被单独索引? 我创建了一个简单的表与一个int []列,并放一个唯一的索引。我注意到,我不能添加相同的数组的int,这导致我相信索引是一个复合的数组项,而不是每个项目的
我在文档中找不到这个问题的确切答案。如果一个列是一个数组类型,所有输入的值是否将被单独索引?

我创建了一个简单的表与一个int []列,并放一个唯一的索引。我注意到,我不能添加相同的数组的int,这导致我相信索引是一个复合的数组项,而不是每个项目的索引。

INSERT INTO "Test"."Test" VALUES ('{10,15,20}');
INSERT INTO "Test"."Test" VALUES ('{10,20,30}');

SELECT * FROM "Test"."Test" WHERE 20 = ANY ("Column1");

索引是否有助于此查询?

是的,你可以索引一个数组,但你必须使用 array operators和 GIN-index type。

例:

CREATE TABLE "Test"("Column1" int[]);
    INSERT INTO "Test" VALUES ('{10,20}');
    INSERT INTO "Test" VALUES ('{10,30}');

    CREATE INDEX idx_test on "Test" USING GIN ("Column1");

    -- To enforce index usage because we have only 2 records for this test... 
    SET enable_seqscan TO off;

    EXPLAIN ANALYZE
    SELECT * FROM "Test" WHERE "Column1" @> ARRAY[20];

结果:

Bitmap Heap Scan on "Test"  (cost=4.26..8.27 rows=1 width=32) (actual time=0.014..0.015 rows=2 loops=1)
  Recheck Cond: ("Column1" @> '{20}'::integer[])
  ->  Bitmap Index Scan on idx_test  (cost=0.00..4.26 rows=1 width=0) (actual time=0.009..0.009 rows=2 loops=1)
        Index Cond: ("Column1" @> '{20}'::integer[])
Total runtime: 0.062 ms

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读