Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据每个聊天室最近的聊天记录对聊天室进行排序的最佳方式是什么_Mysql - Fatal编程技术网

Mysql 根据每个聊天室最近的聊天记录对聊天室进行排序的最佳方式是什么

Mysql 根据每个聊天室最近的聊天记录对聊天室进行排序的最佳方式是什么,mysql,Mysql,我有一个chat_hist表,其结构如下: |chat_id (auto increment)|room_id(int)|sender_id(int)|messege(text)|timestamp| 那么,根据每个聊天室最近的聊天室(时间戳),列出聊天室(聊天室id)的最佳方式(性能方面)是什么(就像Whatsapp组上的列表一样) 我之所以问这个问题,是因为我不是数据库专家,我想象每个房间里的聊天信息都在增长,当每个用户刷新最新列表时,性能会发生什么变化 我现在用的是: select ro

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

|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
其中table
chat\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中忽略它,您是对的。但是查询计划者将其考虑在内。我把它包括在内是为了说明清楚,而不是为了编码的必要性。