自己的统计数据列或汇总表?

时间:2011-04-07 08:31:39

标签: mysql performance innodb

例如,我们有三个表(Post,PostTag和Tag):

Post
=======
id
title
body

PostTag
=======
id
post_id
tag_id

Tag
=======
id
name
normalized_name

我们需要计算标签“sport”中包含的帖子数量。计数查询很慢(我们有几百万行)。

对于解决方案,我们必须将计数存储在数据库中(添加标签后,在删除n - 1后,计数用n + 1更新)。

社区/审核经常添加/删除标签。

我的想法:

创建自己的汇总表以存储标签数量:

 PostTagStat
 ========
 tag_id
 frequency

索引是在列频率上创建的。

但是如果我们在Tag表中添加新列以保存INNER JOIN查询会更好:

 Tag
 ========
 id
 name
 normalized_name
 frequency
你怎么看?自己的表或新专栏?为什么?

1 个答案:

答案 0 :(得分:0)

查询数据:

单个表或两个表之间的选择取决于哪种查询的使用明显多于另一个。 如果大多数查询都是关于标记的基本列,那么两个表将具有更好的性能。如果大多数查询都需要频率标记,单表会更好。

然而,这两种策略与性能几乎没有什么不同,因为只有一列(“频率”列,我猜是4个字节)。


修改数据:

两个表策略比一个表策略稍慢,因为数据库需要更多日志记录表。

但我认为修改的效果不是为更快的查询添加列的动机。因此,修改的性能不应该是您考虑的问题。


系统一次又一次地工作后,您可以根据使用情况改变策略。