Postgres不会在text / varchar列上拾取索引

时间:2016-08-02 10:17:56

标签: postgresql indexing

我正在使用PostgreSQL。我已经为指定的列创建了一个索引:

# CREATE INDEX sampleidx ON fake_organizations (objectable_type) ;
CREATE INDEX

字段objectable_type的类型为varchar。当我按字段选择记录时,它使用显式类型转换的SeqScan,并且不会选择索引。

# explain analyze select * from fake_organizations where objectable_type = 'Lot' LIMIT 10;
QUERY PLAN                                                      
----------------------------------------------------------------------------------------------------------------------
Limit  (cost=0.00..2.01 rows=10 width=493) (actual time=0.001..0.001 rows=0 loops=1)
->  Seq Scan on fake_organizations  (cost=0.00..11.88 rows=59 width=493) (actual time=0.000..0.000 rows=0 loops=1)
     Filter: ((objectable_type)::text = 'Lot'::text)
Planning time: 0.765 ms
Execution time: 0.027 ms
(5 строк)

当列的类型为text时,会发生同样的情况但没有类型转换。

所以问题是:为什么?

1 个答案:

答案 0 :(得分:1)

似乎你的桌子是空的或几乎是空的。没有必要使用索引。它更容易扫描。当您必须对2个对象进行排序时,您不会使用复杂的算法。由于同样的原因,Postgres不使用树遍历算法。