代码之家  ›  专栏  ›  技术社区  ›  therufa

如何在MySQL中存储数据,以获得最快的性能?

  •  1
  • therufa  · 技术社区  · 14 年前

    我正在考虑,以下两种查询类型中的哪一种可以为我的站点内的用户消息模块提供最快的性能:

    我想到的第一个是多表设置,它有一个连接表和一个主表。连接表保存帐户和消息传递表之间的连接。

    在这种情况下,查询如下所示,以获取作者的某些数据以及他发送的消息:

    SELECT m.*, a.username 
      FROM messages AS m
      LEFT JOIN connection_table 
        ON (message_id = m.id)
      LEFT JOIN accounts AS a 
        ON (account_id = a.id)
     WHERE m.id = '32341'
    

    插入它会更加“复杂”。

    我的另一个想法,在我的想法中,这个问题的更好的解决方案是,我将在连接表中使用的数据存储在存储邮件数据的同一个表中。听起来我会得到很多重复的条目,但不会,因为我有一个文本类型的字段,它保存着这样的用户ID:*24*32*249* 如果我想查询它们,我使用类似mysql的方法。删除是另一个问题,但对于这个问题,我还有一个字段存储删除了文章的人。 很遗憾,我不知道怎么加入。

    那么你会推荐什么呢?还有别的办法吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   ThiefMaster    14 年前

    听起来你在使用一个n:m关系。如果是,不要将ID列表放在单列中,而是创建一个包含两列的映射表-表1的主键和表2的主键。然后选择、插入和删除都将是容易的,而且仍然是便宜的。

        2
  •  1
  •   Prescott    14 年前

    我想知道将有多少邮件发送给多个收件人?将它放在一个表中可能会更容易——messageid、sentfrom、sentto、message和dup,适用于多个人。这显然使查询变得非常容易。

    当然,避免在一个字段中存储多个ID,并使用like(这将是一个性能杀手),如果您想要类似的东西,请遵循theefmasters建议。