【发布时间】:2015-07-05 14:41:39
【问题描述】:
通常使用新闻网站等门户网站,我想知道在选择行时更新表的查看计数器字段是否是一种好习惯。假设我有一个带有 id、title、details、publishDate 和 viewCounter 的 News 表。对新闻详情页的每个请求都进行如下查询好不好?将每个请求的 select 和 update 混合在一起会如何影响性能?
select * from News where id=120;
update News
set viewCounter=viewCounter+1
where id=120;
如果我将视图跟踪器数据放在另一个表中,比如带有列 id、newsID、viewCount 的表 ViewsCount,性能会不会有任何差异?在这种情况下,我将执行以下代码:
select * from News where id=120;
update ViewsCount
set viewCount=viewCount+1
where newsID=120;
我会看到另一个选项,我将跟踪每个请求的浏览器请求数据,然后聚合每个新闻 ID 的行。使用这种设计,我将为每个请求运行两个查询:选择和插入,如下所示:
select * from News where id=120;
insert into NewsView(newsID,browser,ipAddress,operatingSystem,col1,col2)
values(120,'Netscape','202.xx.xx.xx','Windows',col1Value,col2Value)
但是我发现,在很短的时间内,我会得到很多行,并且数据库大小也会随着流量大的门户网站而显着增加。这肯定会减慢聚合查询的速度。
我可以使用哪些替代方案?还是可以使用 Google Analytics 之类的页面查看跟踪器?我欢迎根据您在类似情况下一直遵循的最佳做法提出建议。
【问题讨论】:
标签: sql database performance