我跟随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。