【发布时间】:2013-03-06 16:05:49
【问题描述】:
我在 PostgreSQL 中有下表:
CREATE TABLE index_test
(
id int PRIMARY KEY NOT NULL,
text varchar(2048) NOT NULL,
last_modified timestamp NOT NULL,
value int,
item_type varchar(2046)
);
CREATE INDEX idx_index_type ON index_test ( item_type );
CREATE INDEX idx_index_value ON index_test ( value )
我做了以下选择:
explain select * from index_test r where r.item_type='B';
explain select r.value from index_test r where r.value=56;
执行计划的解释如下:
index_test r 上的 Seq 扫描(成本=0.00..1.04 行=1 宽度=1576) 过滤器:((item_type)::text = 'B'::text)'据我了解,这是一次全表扫描。问题是:为什么不使用我的索引?
可能是,原因是我的表中的行数太少?我只有20个。能否请您提供一条 SQL 语句,以便用随机数据轻松填充我的表以检查索引问题?
我找到了这篇文章:http://it.toolbox.com/blogs/db2luw/how-to-easily-populate-a-table-with-random-data-7888,但它对我不起作用。语句的效率不重要,重要的是简单。
【问题讨论】:
-
如果效率不重要,只要简单,你为什么关心它是否使用索引?索引是不影响语义的性能优化——嗯,除了实现细节,如 Pg 的 UNIQUE 索引作为 UNIQUE 约束的实现。
-
克雷格,“效率无关紧要”仅与插入虚拟行的方式有关,请原谅误导性短语。
标签: sql postgresql postgresql-performance