Sql 数据库效率-每用户表与用户表

Sql 数据库效率-每用户表与用户表,sql,database,processing-efficiency,Sql,Database,Processing Efficiency,对于有用户的网站。每个用户都可以创建任意数量的帖子,我们称之为“帖子”: 效率方面-最好为所有帖子创建一个表,为每个帖子保存创建帖子的用户的用户id,还是为每个用户创建一个不同的表,并将该用户创建的帖子放在那里?具有不同表数的架构通常是不好的。将一个表用于您的帖子。如果性能是一个问题,您应该了解数据库索引。虽然索引不是SQL标准的一部分,但几乎所有数据库都支持索引以帮助提高性能 我建议您为所有用户的帖子创建一个表,然后在此表中添加索引以提高搜索性能。例如,您可以在user列中添加索引,以便快速查

对于有用户的网站。每个用户都可以创建任意数量的帖子,我们称之为“帖子”:


效率方面-最好为所有帖子创建一个表,为每个帖子保存创建帖子的用户的用户id,还是为每个用户创建一个不同的表,并将该用户创建的帖子放在那里?

具有不同表数的架构通常是不好的。将一个表用于您的帖子。

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


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

很好地回答具体问题:在查询效率方面,拥有小表总是更好的,因此每个用户的表可能是最有效的。 然而,除非你有很多帖子和用户,否则这不太可能重要。即使有数百万行,如果索引位置正确,也会获得良好的性能

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


在需要时进行优化。不是因为你认为/害怕事情会进展缓慢。(即使您需要优化,也会有比每个用户表更简单的选项)

当您向数据库中添加更多数据时,数据库布局不应改变,因此用户数据肯定应该在一个表中

此外:

  • 拥有多个表意味着您必须动态创建查询

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

  • 在一个表中包含大量数据不会对性能产生多大影响,但包含大量表会对性能产生多大影响

  • 如果您想向表中添加索引以加快查询速度,那么在单个表上执行该操作要容易得多


您的第一个建议是使用一个
用户
和一个
post
表,这是标准方法


目前,posts可能是您站点上唯一一个特定于用户的功能,但想象一下,将来它可能需要增长,以支持具有消息、首选项和,等等。现在,您的每个用户单独表格的方法导致您需要创建的表格数量激增。

我对您的答案有一个类似但不同的问题,因为@guffa和@driis都假设“帖子”需要在用户之间共享

在我的特殊情况下:由于隐私原因,没有一个用户数据点可以与任何其他用户共享,甚至不用于分析

我们计划使用mysql或postgres,以下是我们团队正在讨论的三个选项:

N模式和5个表-我们的一些开发人员认为这是保持数据完全隔离的最佳方向。 优点-如果将模式视为文件夹,将表视为文件,则复杂性更低。我们将为每个用户提供一个模式 缺点-大多数ORM都会根据模式进行连接池

1模式和nx5表-一些开发人员喜欢这样,因为它允许连接池,但似乎使问题更加复杂。 Pros-ORM中的连接池是可能的 缺点-找不到为此设置模型的ORM

1个模式和5个表-一些开发人员喜欢这样,因为他们认为我们从缓存中受益

优点:ORM很高兴,因为这是他们设计的目的 缺点:每个查询都需要username表

一、 就个人而言,在营地1:n模式中着陆。 我的首席开发人员进入营地3:1模式5表

缓存: 如果数据总是1:1,我看不出缓存会有什么帮助,不管我们使用什么解决方案,因为每个用户将搜索不同的信息


有什么想法吗?

用术语
[数据库]“表for each”
搜索此网站,以获取关于此问题的不同观点的长列表。如果问题是快速获取给定用户的帖子,请使用
帖子(用户id)
或类似内容上的索引。如果您有一个模式和一些需要快速运行的示例查询,最好告诉我们该模式和这些查询,并询问我们应该存在哪些索引。我不同意“始终”-给我一个每个用户的所有帖子的计数。编写一个联合查询来为您聚合该查询将不会很有趣,也不会很有效。您可以使用此视图“在需要时进行优化。不是因为您认为/担心某些事情会很慢。”我喜欢它@guffa-我无法将你的回答逻辑应用于我的问题…那么,你能提供其他原因吗?