我有一个chat_hist表,结构如下:
|chat_id (auto increment)|room_id(int)|sender_id(int)|messege(text)|timestamp|
那么,根据每个chat_room
(room_id
)的最新chat
(timestamp
)列出chat_room
(就像在Whatsapp组中列出一样)的最佳方式(性能方面)是什么?
我之所以这样问,是因为我不是数据库专家,我想每个房间里的聊天消息会随着每个用户刷新最新列表时性能的提高而增加
我现在使用的是:
select room_id from (
select room_id,max(time_stamp) as ts from chat_hist where room_id in (
select distinct room_id from chat_room
)
group by room_id
) as A order by ts desc
其中,表chat_room
是所有room_id
所在的位置。
那么最好的方法是什么呢?
提前谢谢你
发布于 2019-06-05 03:58:45
您的chat_id会自动递增。因此,它可能随着时间戳的增加而增加。
因此,您可以在chat_hist中找到每个room_id的最新行,如下所示
SELECT room_id, MAX(chat_id) chat_id
FROM chat_hist
GROUP BY room_id
如果您在room_id
上有一个索引,这个子查询将非常快;它使用所谓的松散索引扫描。
然后,您可以使用它作为子查询来获取每个房间的最新聊天详细信息:
SELECT c.*
FROM chat_hist c
JOIN (
SELECT room_id, MAX(chat_id) chat_id
FROM chat_hist
GROUP BY room_id
) latest ON c.chat_id = latest.chat_id
https://stackoverflow.com/questions/56450406
复制相似问题