小编Zac*_*ack的帖子

在 TIMESTAMP 列上创建索引以与范围运算符一起使用

TLDR:我可以创建一个由以下WHERE子句使用的索引吗:

WHERE foo_date <@ tsrange('2018-01-01', '2018-02-01')
Run Code Online (Sandbox Code Playgroud)


假设我有一张这样的表:

创建表 foo
(
    foo_id INTEGER 由默认身份生成,
    不带时区的 foo_date 时间戳 NOT NULL,
    约束 foo_pkey 主键 (foo_id)
);

此表包含 100,000 条记录,日期从2009-01-012018-12-29。我希望能够查询给定日期范围内的行(例如 2018 年 1 月的行)。

选项1

一种方法是使用BETWEEN运算符:

SELECT * FROM foo WHERE foo_date BETWEEN '2018-01-01' AND '2018-01-31';

这种方法的问题是,如果foo_date发生在2018-01-31午夜之后,它们将不会包含在此查询中。所以我可以将查询更改为BETWEEN '2018-01-01' AND '2018-02-01'. 那么问题来了,然而,上发生的记录2018-02-01 00:00:00。这些将被包括在内,这是我不想要的。

选项 2

Aaron Bertrand提出的另一种选择是使用这个结构:

foo_date >= '2018-01-01' AND foo_date < '2018-02-01'
Run Code Online (Sandbox Code Playgroud)

(是的,此博客适用于 …

postgresql index timestamp range-types

4
推荐指数
1
解决办法
6045
查看次数

标签 统计

index ×1

postgresql ×1

range-types ×1

timestamp ×1