查找由range_contains_elem函数完成时未使用DATERANGE索引

时间:2017-02-01 08:56:19

标签: postgresql indexing jooq

我跟随https://blog.jooq.org/2015/05/07/postgresqls-best-kept-secret-and-how-to-use-it-with-jooq/#comment-147330来支持Jooq中的Postgres范围类型。我有这样的表:

CREATE SEQUENCE currency_conversion_rate_seq START 1;

CREATE TABLE currency_conversion_rate
(
  id INTEGER PRIMARY KEY DEFAULT nextval('currency_conversion_rate_seq'),
  rate numeric(15,8) NOT NULL,
  valid_range DATERANGE NOT NULL
);

CREATE INDEX currency_conversion_rate_valid_range_idx ON currency_conversion_rate 
USING GIST (valid_range);

当我使用blogpost中提到的查询时,不使用索引:

select * from currency_conversion_rate 
where range_contains_elem(valid_range, '1999-01-10'::date)

当我重写查询时,使用了索引:

select * from currency_conversion_rate where valid_range @> '1999-01-10'::date

为什么呢?我使用Postgres 9.5。

0 个答案:

没有答案