通过时间戳

时间:2016-04-25 12:15:21

标签: sql performance postgresql

我正在使用PostgreSQL 9.2.8。

我的表格如下:

CREATE TABLE foo
(
    foo_date timestamp without time zone NOT NULL,
    -- other columns, constraints
)

此表包含大约4.000.000行。一天的数据大约是50.000行。

我的目标是尽快检索一天的数据。

我创建了一个索引:

CREATE INDEX foo_foo_date_idx
ON foo
USING btree
      (date_trunc('day'::text, foo_date));

现在我选择这样的数据(now()只是一个例子,我需要任何一天的数据):

select * 
from process 
where date_trunc('day'::text, now()) = date_trunc('day'::text, foo_date) 

此查询持续约20秒。

是否有可能在更短的时间内获得相同的数据?

1 个答案:

答案 0 :(得分:1)

检索50,000行需要时间。 20秒似乎很长一段时间,但如果行宽,那么这可能是一个问题。

您可以直接索引foo_date并使用不等式。所以,您可以尝试这个版本:

create index foo_foo_date_idx2 on foo(foo_date);

select p
from process p
where p.foo_date >= date_trunc('day', now()) and
      p.foo_date < date_trunc('day', now() + interval '1 day');