Mysql 根据每个聊天室最近的聊天记录对聊天室进行排序的最佳方式是什么
我有一个chat_hist表,其结构如下:Mysql 根据每个聊天室最近的聊天记录对聊天室进行排序的最佳方式是什么,mysql,Mysql,我有一个chat_hist表,其结构如下: |chat_id (auto increment)|room_id(int)|sender_id(int)|messege(text)|timestamp| 那么,根据每个聊天室最近的聊天室(时间戳),列出聊天室(聊天室id)的最佳方式(性能方面)是什么(就像Whatsapp组上的列表一样) 我之所以问这个问题,是因为我不是数据库专家,我想象每个房间里的聊天信息都在增长,当每个用户刷新最新列表时,性能会发生什么变化 我现在用的是: select ro
|chat_id (auto increment)|room_id(int)|sender_id(int)|messege(text)|timestamp|
那么,根据每个聊天室
最近的聊天室
(时间戳
),列出聊天室
(聊天室id
)的最佳方式(性能方面)是什么(就像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
其中tablechat\u room
是所有room\u id
所在的位置
那么,做这件事的最佳方式是什么
提前感谢您您的聊天室id。所以大概它会随着时间戳的增加而增加 因此,您可以在chat_hist中找到每个房间id的最新一行,如下所示
SELECT room_id, MAX(chat_id) chat_id
FROM chat_hist
GROUP BY room_id
如果您在room\u 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
如果您没有使用room\u id,则可以从selectSure中忽略它,您是对的。但是查询计划者将其考虑在内。我把它包括在内是为了说明清楚,而不是为了编码的必要性。