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

数组 – PostgreSQL可以索引数组列吗?,第1张

概述我在文档中找不到这个问题的确切答案。如果一个列是一个数组类型,所有输入的值是否将被单独索引? 我创建了一个简单的表与一个int []列,并放一个唯一的索引。我注意到,我不能添加相同的数组的int,这导致我相信索引是一个复合的数组项,而不是每个项目的索引。 INSERT INTO "Test"."Test" VALUES ('{10, 15, 20}');INSERT INTO "Test"."T 我在文档中找不到这个问题的确切答案。如果一个列是一个数组类型,所有输入的值是否将被单独索引?

我创建了一个简单的表与一个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
总结

以上是内存溢出为你收集整理的数组 – PostgreSQL可以索引数组列吗?全部内容,希望文章能够帮你解决数组 – PostgreSQL可以索引数组列吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存