从Mysql获取数据时选择一种方法而不是另一种方法的复杂性

从Mysql获取数据时选择一种方法而不是另一种方法的复杂性,mysql,join,triggers,database-performance,Mysql,Join,Triggers,Database Performance,我正在从事一个基于PHP、Mysql和Apache的项目 我有一个叫做通知的模块,它就像FACEBOOK上的通知一样,为此我有3种方法 或者 我将每个更新插入到一个表中,以计算需要通知这些更新的用户数,即,如果假设类别B有一些更新,而类别B包含100个用户,那么我将在一个通知表中为相应的用户插入100行 第二条路 我所能做的就是在表中插入一个特定的categories条目,然后对每个caregoriy ID提交一个重载联接查询,以从多个表中获取所有记录,从而获取记录 第三条路 我在每次更新时都使

我正在从事一个基于PHP、Mysql和Apache的项目

我有一个叫做通知的模块,它就像FACEBOOK上的通知一样,为此我有3种方法

或者 我将每个更新插入到一个表中,以计算需要通知这些更新的用户数,即,如果假设类别B有一些更新,而类别B包含100个用户,那么我将在一个通知表中为相应的用户插入100行

第二条路

我所能做的就是在表中插入一个特定的categories条目,然后对每个caregoriy ID提交一个重载联接查询,以从多个表中获取所有记录,从而获取记录

第三条路

我在每次更新时都使用触发器,这样就可以用来通知用户

我相信这三种方式在某一点上都是有问题的

现在有谁能提出更好的主意,或者哪一个是更好的选择

我关心的是网站的表现,因为它将有大量的条目


谢谢

这比我最初想的要复杂一些:)

应用程序/用户的行为如何?我们什么时候做大部分工作?是在插入数据时,还是在获取数据时

我必须对最常见的操作进行假设。我假设获取数据会更常见一些,因为许多用户会看到未读消息的通知,但只有一个新消息的“插入”

因此,我会把工作放在插入新的通知上,但当用户开始蜂拥到你的应用程序时,结果可能会很糟糕

但我认为,在进行任何优化之前,需要先设置模型,这一点更为重要。以后可以通过使用、调度等方式来管理优化。我不会真的去碰触发器,它们有点时髦

我还将提出另一种方法

用户写入新消息:

  • 插入消息
  • 更新用户类别(有多个)当时更新的类别

    更新用户类别集last_changed='NOW()'其中类别id=

如何查找用户未读邮件:

  • 选择自上次用户查看以来已更新的类别(脏?)
  • 从“用户消息”中不包含的类别中选择所有消息(见下文)
用户已阅读此消息

  • 在耦合消息和用户的*user\u message\u noted*架构中插入一行。类别id在那里,因此我们可以在上面做得更快,而无需额外的连接
在从该类别读取的所有邮件上 -更新*用户类别™ (有许多)带有用户阅读所有消息的日期


但是有时候,你真的无法逃避实际的工作。

MySQL中的触发器支持充其量是劣质的,所以我不会朝这个方向努力,尽管这可能是一个很好的方法

最简单的方法是:对于每次登录/注销,从“在线用户”中插入/删除用户。id,然后让前端(无论如何都有jack shit要做)时不时地询问他知道哪些id在表中

连接,除了在mysql中相对不是很聪明之外,在大表上甚至在索引上也会很慢

触发器,同样,然后,你会要求触发器做什么??推送至此人已登录的所有页面?推给那些感兴趣的人?这意味着又一次加入,即性能冲击


通知表?完全巨大且无原因地缓慢(即,100个插入而不是一个where query..meh)。

类别与用户的关系是一对一还是多对多?请添加您将发布的
常见查询以及您的
模式
。我所说的常见查询是1。查找必须向其发送此通知的所有用户。2.查找用户的
挂起的
通知。3.查找用户的
通知
通知。等。这将提供一个更好的想法,你想做什么。当你说批量输入时,是指用户数量吗?谢谢