我正在使用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
时,会发生同样的情况但没有类型转换。
所以问题是:为什么?
答案 0 :(得分:1)
似乎你的桌子是空的或几乎是空的。没有必要使用索引。它更容易扫描。当您必须对2个对象进行排序时,您不会使用复杂的算法。由于同样的原因,Postgres不使用树遍历算法。