2013-06-21 59 views
3

我有一个非常通用的数据库问题。我在我的数据库中创建了一个表,用于跟踪整个网站中的点击次数。我的表结构如下:数据库设计问题由于量

  • (PK) - ID,
  • (FK) - PAGEID,
  • (FK) - 的ContactID,
  • 日期

这个问题我我认为,如果用户设置较大,并且有大量点击数据,则此表中的行数在20-30万个范围内。是否有另外一种方式可以组织这些数据,以便更轻松地进行报告?

SELECT P.TITLE, COUNT(DISTINCT(C.ID)) 
FROM PAGES P 
INNER JOIN CLICKS C ON C.PAGEID = P.PAGEID 
WHERE C.DATE >= 5/1/2013 AND C.DATE < 6/1/2013 AND C.PAGEID = XYZ 
+2

你为什么不保持这种模式,并运行每日一次,它将在汇总结果到一个单独的表汇总查询?较小的聚合表应该更快地进行查询。 – Suman

+0

你有日期索引吗? –

+0

定期存档cron作业(也可能是汇总?)数据。 – Kevin

回答

2

这就是所谓的三维设计。

您可以使用像Pentaho的聚合设计的工具,以找到合适的聚合(如点击次数由客户通过一个月)。

然后使用OLAP工具,像蒙德里安+斋宫,可动态重写查询,使用总量时是有利的。

您应该使用日期维度表的整数智能钥匙&匕首; (如20130621)。这可以很容易地按日期划分访问事实。

Pentaho的数据集成可以很容易进行分区表。

&dagger;这是唯一一次在尺寸设计中使用智能钥匙的时间。