首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聊天消息程序mysql优化

聊天消息程序mysql优化
EN

Stack Overflow用户
提问于 2016-04-27 20:41:14
回答 1查看 37关注 0票数 0

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

代码语言:javascript
复制
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中的所有消息,我将update del_to_status=1 where from=2 and to=1,但我需要扫描所有的表来完成这一点,搜索每个消息from=2 to=1和del_to_status=0。如果我有很多信息,可能会很慢,不是吗?对此有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-27 21:46:10

考虑到您提到的更新查询和选择类型,我认为您的索引看起来还不错,我认为您需要显示聊天。

但是,如果您预期这个表有许多行,我可能会优化字段以最小化表的大小,以便在表增长时保持性能。sent可以是时间戳,而不是空缺省CURRENT_TIMESTAMP。我不清楚recddel_from_statusdel_to_status的用途,但如果它们只是布尔值,如果您的MySQL引擎足够现代,则可以使用位(1)字段;如果不是布尔字段的话。

使用fromto作为字段名也是不寻常的,因为它们是保留的SQL。结合所有这些,下面是建议创建表的另一种方法:

代码语言:javascript
复制
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表中添加“自”和“直到”时间戳,以支持用户加入和离开组聊天。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36900455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档