MySQL性能:很多表还是很多行?

时间:2011-10-21 14:59:16

标签: php mysql performance

我想在我的PHP / MySQL应用程序中记录对页面的访问,以实现类似于SO上的视图计数。 我的计划是通过每页上的唯一IP地址来计算请求。大约有 5000 个不同的页面,其中包含一个查看计数。 (我知道计算IP并不准确,但我的目的可以。)

我看到两个选项来组织数据库表:

  • 一个包含字段“page_id”,“request_ip”的大表。假设每个页面平均有50个独特IP视图,我会得到 5000 x 50 = 250 000行。当视图显示在页面上时,该表将对每个页面上的每个请求具有读写访问权限。
  • 另一个选项是每页有一个表,其中包含一列“request_ip”。然后我会有 5000个表,平均存储50行行。只有在查看页面时才能访问表格。

哪一个更好,性能更好?还是我完全走错了路?

2 个答案:

答案 0 :(得分:6)

5000个表意味着5000个不同的查询+ 5000个不同的索引集+ 5000个不同的数据集竞争服务器缓存中的空间。表现很可能很糟糕。

存储完全相同数据结构的多个表几乎总是一个糟糕的设计。如果你担心性能问题,你可以使用MySQL的partitioning support自动将表格分成多个部分,这对最终用户是透明的(例如你的查询)。

答案 1 :(得分:2)

更好的方法是拥有一个存储访问日期时间,页面ID,IP地址等的表。然后每次访问页面时,只需在表格中添加一行即可。这将为您提供原始级别的数据,然后您可以简单地将其聚合以回答您想要的问题。

以这种方式存储数据还可以让您回答更详细的问题,例如在特定日期或某周内制作了多少页面浏览量?您无法使用您在问题中使用的表格结构。