Postgresql Postgres不使用“索引”;创建“U时间/60”;

Postgresql Postgres不使用“索引”;创建“U时间/60”;,postgresql,indexing,performance,Postgresql,Indexing,Performance,我有一个在网络中保存服务器统计数据的系统。之后,用户可以使用所有数据并规划其增长。因此,重要的是将数据汇总成一个图表,即一小时、一天、一周、一年等 我正在尝试这样做: select created_time / 60, count(*) from pm_server_stat group by (created_time / 60); --with this index CREATE INDEX pm_server_stat_created_time_60 ON pm_server_sta

我有一个在网络中保存服务器统计数据的系统。之后,用户可以使用所有数据并规划其增长。因此,重要的是将数据汇总成一个图表,即一小时、一天、一周、一年等

我正在尝试这样做:

select created_time / 60, count(*)
from pm_server_stat
group by (created_time / 60);

--with this index
CREATE INDEX pm_server_stat_created_time_60
  ON pm_server_stat
  USING btree
  ((created_time / 60));
这就是我得到的解释

"GroupAggregate  (cost=189822.36..213951.06 rows=1206435 width=8)"
"  Output: ((created_time / 60)), count(*)"
"  ->  Sort  (cost=189822.36..192838.45 rows=1206435 width=8)"
"        Output: created_time, ((created_time / 60))"
"        Sort Key: ((pm_server_stat.created_time / 60))"
"        ->  Seq Scan on public.pm_server_stat  (cost=0.00..34967.44 rows=1206435 width=8)"
"              Output: created_time, (created_time / 60)"
有人知道为什么会这样吗?我怀疑这些类型可能不同?

PostgreSQL在9.1或之前版本中没有“覆盖”索引。这意味着它无论如何都必须访问这些行,在这种情况下,它还不如扫描它们。它们将出现在9.2版本中(如果你想试用的话,目前正在进行beta测试),但我不确定它们是否足够聪明

一旦你想要“提供的文件总数”或“传输的数据包总数”,它就永远不会起作用

通常,对于这类汇总任务,您会有一个或多个汇总表:stats\u minute、stats\u hour、stats\u day、stats\u week等。有多少汇总表取决于总数据大小/性能要求。使用简单的cron作业使摘要保持最新。如果数据带有“延迟”时间戳,您可能需要稍微延迟或允许重新计算


然后,您可以将汇总表与自当前小时开始以来所有行的实际总和合并。查询的数据要少得多,而且可以根据需要以最快的速度进行查询。

是的。。。基本上你说的是“运行数据仓库”,也就是星型模式。你是对的。。。我的意图是做一个“和(进),和(出)”