gpt4 book ai didi

php - 索引聊天mysql表

转载 作者:行者123 更新时间:2023-11-29 06:21:51 24 4
gpt4 key购买 nike

我有这个聊天表:

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

基本上我需要一直进行选择(每个用户 3 秒)来检查新消息:

select id, `from`, message, sent from support_chat where `to` = ? and seen = 0

我有500万行,通常是100个用户同时在线。我可以改变一些东西来使这张 table 更快吗? key from 和 key to 是一个不错的选择吗?

最佳答案

您无法通过索引来加快特定查询的速度。您可以在 to 和 seen 字段上有一个复合索引,但如果有改进的话,也将是最小的。为什么?因为 seen 字段的基数很差。您似乎只在其中存储 0 或 1,并且此类列上的索引不是很有用。查询优化器直接读取数据通常会更快。

但这是您可以做的 Partition :

... enables you to distribute portions of individual tables across a file system according to rules which you can set largely as needed. In effect, different portions of a table are stored as separate tables in different locations. The user-selected rule by which the division of data is accomplished is known as a partitioning function,

您可以按照将非常旧的数据与新数据分开的方式对数据进行分区。这可能会给你很大的插入力。但是请注意,如果您的查询既要获取旧数据又要获取新数据,那么速度会慢很多。

这是您可以做的另一件事:添加限制子句。您可能在任何给定时间只显示有限数量的消息。设置限制条款会有所帮助。然后mysql知道找到N行后就不需要再找了。

关于php - 索引聊天mysql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959500/

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