gpt4 book ai didi

MySQL 数据库优化 - 我有一个包含大量重复项的消息表

转载 作者:行者123 更新时间:2023-11-29 12:44:27 25 4
gpt4 key购买 nike

我的数据库中有一个消息表。问题是,每个收件人的每条消息都有一行,即使他们收到相同的消息。见下文:

|  ID  | RECIP_ID  | MESSAGE               |
| 1 | 366 | "URGENT REMINDER..." |
| 2 | 367 | "URGENT REMINDER..." |
| 3 | 368 | "URGENT REMINDER..." |

因此,正如您(希望)看到的那样,这是针对每个收件人保存的相同消息。我确信这是非常低效的。最好的方法是什么?我想记录每个recip_id发送了什么消息。

最佳答案

简而言之,我建议to normalize你的 table 。为了高效存储数据,至少需要使用3张表:

  • 消息(ID、内容、时间戳) - 存储消息
  • 收件人(ID等...) - 存储收件人
  • RecipientMessages(MessageId, RecipientId) - 存储发送给哪个收件人的消息

选择示例,它将在您设置上述格式时获取数据:

SELECT
`r`.*,
`m`.*
FROM
`Messages` as `m`
INNER JOIN `RecipientMessages` as `rm`
ON `m`.`Id` = `rm`.`MessageId`
INNER JOIN `Recipients` as `r`
ON `rm`.`RecipientId` = `r`.`Id`

插入示例,这将使您了解如何写入数据:

START TRANSACTION;

INSERT INTO `Messages`
(`Id`, `Content`, `TimeStamp`)
VALUES
(NULL, 'URGENT REMINDER...', NOW());

INSERT INTO `RecipientMessages`
(`MessageId`, `RecipientId`)
VALUES
(LAST_INSERT_ID(), 366),
(LAST_INSERT_ID(), 367),
(LAST_INSERT_ID(), 368);

COMMIT;

关于MySQL 数据库优化 - 我有一个包含大量重复项的消息表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25641863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com