PostgreSQL忽略时间戳列上的索引

PostgreSQL忽略时间戳列上的索引,sql,postgresql,indexing,Sql,Postgresql,Indexing,我创建了以下表格和索引: CREATE TABLE cdc_auth_user ( cdc_auth_user_id bigint NOT NULL DEFAULT nextval('cdc_auth_user_id_seq'::regclass), cdc_timestamp timestamp without time zone DEFAULT ('now'::text)::timestamp without time zone, cdc_operation text, id

我创建了以下表格和索引:

CREATE TABLE cdc_auth_user
(
  cdc_auth_user_id bigint NOT NULL DEFAULT nextval('cdc_auth_user_id_seq'::regclass),
  cdc_timestamp timestamp without time zone DEFAULT ('now'::text)::timestamp without time zone,
  cdc_operation text,
  id integer,
  username character varying(30)
);

CREATE INDEX idx_cdc_auth_user_cdc_timestamp
          ON cdc_auth_user
       USING btree (cdc_timestamp);
但是,当我使用timestamp字段执行select时,索引被忽略,我的查询几乎需要10秒才能返回:

EXPLAIN SELECT *
          FROM cdc_auth_user
         WHERE cdc_timestamp BETWEEN '1900/02/24 12:12:34.818'
                             AND '2012/02/24 12:17:45.963';


Seq Scan on cdc_auth_user  (cost=0.00..1089.05 rows=30003 width=126)
  Filter: ((cdc_timestamp >= '1900-02-24 12:12:34.818'::timestamp without time zone) AND (cdc_timestamp <= '2012-02-24 12:17:45.963'::timestamp without time zone))
解释选择*
来自cdc\u认证用户
其中,cdc_时间戳介于“1900/02/24 12:12:34.818”之间
和“2012/02/24 12:17:45.963”;
cdc_认证_用户上的序列扫描(成本=0.00..1089.05行=30003宽度=126)

过滤器:((cdc_timestamp>='1900-02-24 12:12:34.818'::没有时区的时间戳)和(cdc_timestamp如果有很多结果,btree可能比仅仅进行表扫描慢。btree索引实际上不是为这种“范围选择”设计的您在这里执行的查询类型;条目放在一个大的未排序文件中,索引是针对该未排序组构建的,因此每个结果在btree中找到后都可能需要磁盘查找。当然,btree可以很容易地按顺序读取,但结果仍然需要从磁盘中提取


索引通过根据BTURE中的实际内容排序数据库来解决这个问题,所以它们实际上有助于这样的远程查询。请考虑使用聚集索引,看看它是如何工作的。

表中有多少个?可能是因为使用索引而不是TA的代价会更大。PostgreSQL中的CLUSTER命令仅与“聚集索引”松散相关。该命令所做的是根据索引的排序对表的行重新排序。不会更改索引的任何内容,这是一个一次性操作。表不会以任何方式绑定到索引。以后的写入操作将一如既往地进行。群集仍然非常有用。@Edwin:Hmm。这很烦人。是否有任何类型的群集btrPostgreSQL中的ee索引?PostgreSQL没有相同的“聚集索引”与Oracle一样。但是,如果您需要该功能,并在cronjob中定期安排群集,或者由某些事件触发,那么在大多数情况下,您应该会获得大部分好处。例外情况是编写了大量的表,您没有很好的方法来决定何时重新群集)。还有
clusterdb
()shell实用程序。更确切地说:这些表保存了用于下一个集群的索引的信息,而没有参数。@ErwinBrandstetter:我不是在想oracle,我是在想mssql或mysql。:叹气:我很惊讶它不支持这种东西。