我在文档中找不到这个问题的确切答案。如果一个列是一个数组类型,所有输入的值是否将被单独索引?
我创建了一个简单的表与一个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。
原文链接:https://www.f2er.com/postgresql/193878.html例:
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