2011-09-25 52 views
17

针对拥有用户的网站。每个用户都有能力创建任意数量的,我们称之为“帖子”:数据库效率 - 每个用户的表格与用户表格的比较

效率明智 - 为所有帖子创建一张表,最好是保存用户的用户ID为每个帖子创建帖子 - 或者为每个用户创建一个不同的单独,并在其中放置该用户创建的帖子?

+5

在这个问题上搜索这个网站的每个“''的长表的不同花费的长表。 – Mat

+1

如果问题是快速获取给定用户的帖子,则使用'posts(user_id)'或类似的索引。如果您有一个需要快速运行的模式和一些示例查询,最好告诉我们模式和这些查询并询问我们应该存在哪些索引。 –

回答

22

当你添加更多的数据,将其数据库布局应该不会改变,因此用户数据绝对应该在一个表中。

另外:

  • 有多个表意味着你必须动态地创建查询。

  • 一张表的缓存查询计划不会用于任何其他表。

  • 在一个表中有很多数据不会影响性能,但有很多表。

  • 如果你想添加索引表中进行查询速度更快,这是一个更容易做一个表。

5

具有不同数量的表的模式通常是不好的。为你的帖子使用一张表。

4

如果性能是一个问题,您应该了解数据库索引。虽然索引不是SQL标准的一部分,但几乎所有数据库都支持它们来帮助提高性能。

我建议您为所有用户的帖子创建一个表,然后向该表添加索引以提高搜索性能。例如,您可以在user列中添加索引,以便您可以快速查找给定用户的所有帖子。您可能还想考虑添加其他索引,具体取决于您的应用程序的要求。

8

那么回答具体问题:就查询效率而言,最好是有一个小表,因此每个用户的表可能是最有效的。

但是,除非您有很多的帖子和用户,这可能不重要。即使有数百万行,您也可以通过良好的索引获得良好的性能。

我强烈建议不要使用按用户表策略,因为它会给您的解决方案增加很多复杂性。当你需要查找在一年内发布的主题时,你如何查询?

当您需要时进行优化。不是因为你觉得/害怕会有些缓慢。 (即使你需要优化,会有比表每用户更容易的选项)

+0

我不同意“永远” - 给我每个用户的所有帖子的数量。编写一个UNION查询将为你聚合,这不会很有趣,也不会有效。 –

4

你具有单user和单一post表的第一项建议是采取的标准方法。

目前的职位可能是在您的网站的唯一用户特定的功能,但想象它可能需要在未来的增长来支持用户有消息,喜好等现在,您的单独的按用户表的方法会导致您需要创建的表的数量激增。