我有一张表,其中包含类型为VARCHAR
的一维数组。
CREATE TABLE IF NOT EXISTS table_name (
attribute VARCHAR(64) ARRAY DEFAULT NULL
);
我希望对此类型建立索引,因此我尝试创建一个GIN
类型索引,如下所示:
CREATE INDEX table_ix ON table_name USING GIN (attribute);
不幸的是,似乎PostgreSQL的执行计划没有选择该索引。运行EXPLAIN ANALYZE [...]
会产生以下结果:
Seq Scan on table_name (cost=0.00..2.15 rows=11 width=717) (actual time=0.010..0.019 rows=11 loops=1)
Filter: (attribute @> '{VALUE}'::character varying[])
Rows Removed by Filter: 1
Planning time: 0.201 ms
Execution time: 0.033 ms
我什至尝试使用SET ENABLE_SEQSCAN TO OFF;
禁用顺序扫描,但结果仍然相同,仍然不使用索引。
如您所见,表本身当前只包含很少的行,实际上只有11行,由于行数少,PostgreSQL是否有可能决定完全忽略索引,但是当记录数很大时,实际上会使用索引成长?还是我可能没有正确设置索引?