gpt4 book ai didi

mysql - 聊天信使 mysql 优化

转载 作者:行者123 更新时间:2023-11-29 07:18:42 25 4
gpt4 key购买 nike

我有一个聊天系统,我想要一些想法来优化它:

CREATE TABLE IF NOT EXISTS `chat` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`from` int(11) UNSIGNED NOT NULL,
`to` int(11) UNSIGNED NOT NULL,
`message` text NOT NULL,
`sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`recd` int(11) UNSIGNED NOT NULL DEFAULT '0',
`del_from_status` int(11) NOT NULL DEFAULT '0',
`del_to_status` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `from` (`from`),
KEY `to` (`to`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;

1)这个表可以大得多,想象一下 100 个女孩整天在线互相交谈,那么我的索引好吗?

2) 我有 del_from_status 和 del_to_status,例如,如果用户 1 删除了用户 2 的所有消息,我将更新 del_to_status=1,其中 from=2 和 to=1 但我需要扫描所有表都执行此操作,搜索从 = 2 到 = 1 和 del_to_status = 0 的每条消息。如果我有很多消息,速度可能会很慢,不是吗?对此有何建议?

最佳答案

考虑到您提到的 UPDATE 查询以及我想您需要显示聊天的 SELECT 类型,我认为您的索引看起来不错。

但是,如果您预计该表有很多行,我可能会优化字段以最小化表大小,以便在其增长时保持性能。 sent 可以是 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP。我不清楚 recddel_from_statusdel_to_status 的用途,但如果它们只是 bool 值,您可以使用 BIT(1 ) 如果您的 MySQL 引擎足够现代,则这些字段;如果不是 BOOLEAN 字段。

使用 fromto 作为字段名称也是不常见的,因为这些是保留的 SQL 字。结合所有这些,这里是建议的替代创建表:

CREATE TABLE `chat` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`from_user` int(10) unsigned NOT NULL,
`to_user` int(10) unsigned NOT NULL,
`message` text NOT NULL,
`sent` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`recd` tinyint(1) NOT NULL DEFAULT '0',
`del_from_status` tinyint(1) NOT NULL DEFAULT '0',
`del_to_status` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `from` (`from_user`),
KEY `to` (`to_user`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

最后的想法 - 如果您希望将来支持群聊,您可能希望重新构建它。您可以有一个 chat 表来告诉您哪些用户正在聊天,以及一个 chat_message 表,其中包含与 chat.id 相关的消息内容>。您可以向 chat 表添加“since”和“until”时间戳,以支持用户加入和离开群聊。

关于mysql - 聊天信使 mysql 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900455/

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