我有一个视图表,可以跟踪每天的视图。我们用这个表来显示日线图和月线图。桌子看起来像:

id, post_id, day, month, year, count.

这意味着每一篇文章(一年内)有365次浏览量。这意味着如果我有1000个职位。我在视图表中有365000个条目。我们有好几个职位和计票。有时一天发10个帖子。
我在post_iddaymonthyear上建立了一个索引。
担心随着表的指数增长,这可能会导致数据库性能问题吗?我应该担心吗?还是我应该没事?

最佳答案

我认为你让事情变得比你需要的更困难。为什么不这样定义一个表:

create table daily_views
( post_id int not null
, view_date date not null
, count int not null
, primary key (post_id, view_date)
, foreign key (post_id) references post(post_id)
)

除非您有一个引用daily_views表的子表,否则在daily_views上使用自动递增ID没有特别的好处。事实上,您只是在浪费空间来创建一个比自然键(即post_idview_date)更不有用的索引。
将日、月和年分开列是没有好处的。如果将日期存储为单个字段,则效率会更高,而且可以轻松地在任何日期范围内进行聚合,而不仅仅是在一个月的几天、几个月和几年中。
通过使用此表格式,您将优化使用的空间和对记录的访问,这将减轻您对性能和可伸缩性的任何担心。就生成的行数而言,我认为您不必担心这个问题。很多数据库都有数百万行的表。你只需要确保每一行尽可能紧凑。

10-08 07:22