很多小mysql表或一个大表

很多小mysql表或一个大表,mysql,sql,database,performance,structure,Mysql,Sql,Database,Performance,Structure,我有一个论坛,我有这样的属性-> follow,voteup,votedown,报告,收藏夹,查看等,针对每个线程、答案、评论 哪种方法在性能方面更快更好? 我期待着数以十亿计的喜爱的,浏览量等等…就像youtube 方法一 制作一张大桌子柜台 计数器|用户|对象|对象|类型|属性 其中对象类型=线程,注释,答案,以及表线程,注释,答案 和属性=跟随,voteup,votedown,报告等 方法二 为后续、视图、报告等制作单独的表格 视图 view_id | user_id | object_

我有一个论坛,我有这样的属性->
follow
voteup
votedown
报告
收藏夹
查看
等,针对每个线程、答案、评论

哪种方法在性能方面更快更好? 我期待着数以十亿计的
喜爱的
浏览量
等等…就像
youtube

方法一 制作一张大桌子
柜台

计数器|用户|对象|对象|类型|属性

其中
对象类型
=
线程
注释
答案
,以及表
线程
注释
答案

属性
=
跟随
voteup
votedown
报告

方法二
后续
视图
报告
等制作单独的表格

  • 视图

    view_id | user_id | object_id | object_type

  • 如下所示

    follow_id | user_id | object_id | object_type


    • 这个问题没有单一的答案,它相当主观

      最常见的是考虑你的设计用例。在将这些字段添加到任何表之前,请仔细考虑它们的用途。并且不要认为必须向每个表中添加数字主键(“ID”)。下面的跟踪表很好,只有字段
      user id | object id | object type
      和主键中包含的所有三个字段

      你的代码不太可能被用于youtube甚至堆栈溢出等性能限制。如果是这样的话,到那时你很可能已经重新构建了数据库

      然而,为了练习,考虑在哪里和如何使用数据…

      我会有如下单独的表格

      跟随 用户feed可能需要自己的表,因为它最常见的情况是在任何地方被点击(有点像一个全局收件箱)。follow还应该有一些标志或时间戳来显示更改,以便在用户上次联机后发生更改时很容易进行评估

      这是因为用户需要看到他们作为某种提要遵循了什么,而其他人需要看到有多少人遵循了。但其他人不需要知道还有谁在跟进

      投赞成票,投反对票 那只是投票和一个+-标志。做非规范化这个。。。即在表中存储用户的个人投票,并在对象表的字段中存储针对对象的投票计数。这样,您就只能检查单个用户对页面视图的投票(他们自己的投票)。从包含内容的同一行检索计数

      再说一遍。用户需要查看他们投了哪些赞成票/反对票。你需要检查一下他们没有投两次票。重要的是最后的计数。因此,检查一个拥有一百万张选票的对象不需要点击一百万行,只需点击一行

      专业提示:如果不断更新包含大量内容的行,某些数据库引擎的性能会很差。因此,考虑所有对象的“元数据”表。哪些商店像这样重要。这使得元数据可以自由地频繁更新,即使内容没有更新

      最喜欢的 再次拥有自己的桌子<代码>用户id |对象id |对象类型
。如果您想向公众显示收藏的数量,然后对对象进行计数,不要对每个页面视图执行
select count(*)

查看 为什么还要储存这个?对该对象进行计数。如果要存储历史记录,请确保对其添加时间戳并定期清除。您不需要存储用户六个月前看到的内容


总的来说,除了赞成票和反对票之外,所有这些都是单独的表格

您应该对计数进行非规范化,以减少服务器确定页面视图所需访问的数据量。通常,页面视图应该是最快的事情。任何形式的更新都可能稍微慢一点


在这里,我提到收藏夹和其他人不需要额外的主键字段。我的意思是,它们有一个主键,而不是一个附加字段。例如,收藏夹可以是:

CREATE TABLE favourites (
    user INT,
    object_type INT,
    object_id INT,
    PRIMARY KEY (user, object_type, object_id)
) 

根本没有理由设置一个
收藏夹id
字段。

对此没有单一的答案,这是非常主观的

最常见的是考虑你的设计用例。在将这些字段添加到任何表之前,请仔细考虑它们的用途。并且不要认为必须向每个表中添加数字主键(“ID”)。下面的跟踪表很好,只有字段
user id | object id | object type
和主键中包含的所有三个字段

你的代码不太可能被用于youtube甚至堆栈溢出等性能限制。如果是这样的话,到那时你很可能已经重新构建了数据库

然而,为了练习,考虑在哪里和如何使用数据…

我会有如下单独的表格

跟随 用户feed可能需要自己的表,因为它最常见的情况是在任何地方被点击(有点像一个全局收件箱)。follow还应该有一些标志或时间戳来显示更改,以便在用户上次联机后发生更改时很容易进行评估

这是因为用户需要看到他们作为某种提要遵循了什么,而其他人需要看到有多少人遵循了。但其他人不需要知道还有谁在跟进

投赞成票,投反对票 那只是投票和一个+-标志。做