在每个聊天室中按最新聊天对聊天室进行排序的最佳方法是什么

时间:2019-06-04 19:48:07

标签: mysql

我有一个chat_hist表,其结构如下:

|chat_id (auto increment)|room_id(int)|sender_id(int)|messege(text)|timestamp|

那么,基于每个chat_room中的最新room_idchat)来列出timestampchat_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所在的位置。

那么最好的方法是什么...

提前谢谢

1 个答案:

答案 0 :(得分:1)

您的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