我正在使用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秒。
是否有可能在更短的时间内获得相同的数据?
答案 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');