我有这个选择:
SELECT MAX(id) FROM chat
WHERE (`to` = 1 and `del_to_status` = '0') or (`from` = 1 and `del_from_status` = '0')
GROUP BY CASE WHEN 1 = `to` THEN `from` ELSE `to` END
聊天室:
`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,
`del_from_status` tinyint(1) NOT NULL DEFAULT '0',
`del_to_status` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `from` (`from`),
KEY `to` (`to`),
);
问题是它使用的是全表扫描:
这要花很多时间。有什么想法可以更快的得到结果吗?
1条答案
按热度按时间7gcisfzg1#
您如何看待这个解决方案:
注意,我忽略了
del_to_status
列,您可以轻松地添加它们。但实际上我认为你的db模式是错误的,我认为你需要更像这样的东西:
如果你需要: