我有一个视图表,可以跟踪每天的视图。我们用这个表来显示日线图和月线图。桌子看起来像:
id, post_id, day, month, year, count.
这意味着每一篇文章(一年内)有365次浏览量。这意味着如果我有1000个职位。我在视图表中有365000个条目。我们有好几个职位和计票。有时一天发10个帖子。
我在
post_id
、day
、month
和year
上建立了一个索引。担心随着表的指数增长,这可能会导致数据库性能问题吗?我应该担心吗?还是我应该没事?
最佳答案
我认为你让事情变得比你需要的更困难。为什么不这样定义一个表:
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_id
和view_date
)更不有用的索引。将日、月和年分开列是没有好处的。如果将日期存储为单个字段,则效率会更高,而且可以轻松地在任何日期范围内进行聚合,而不仅仅是在一个月的几天、几个月和几年中。
通过使用此表格式,您将优化使用的空间和对记录的访问,这将减轻您对性能和可伸缩性的任何担心。就生成的行数而言,我认为您不必担心这个问题。很多数据库都有数百万行的表。你只需要确保每一行尽可能紧凑。