只保留表中的N个最近记录?

时间:2014-05-08 17:28:24

标签: mysql sql database-design

我有一个聊天消息表,如:

id | fk_user_1_id | fk_user_2_id | message | timestamp

我只需要保留每个朋友对的50条最新消息。最简单的方法是什么?一个糟糕的方式是:

  1. 插入新讯息。
  2. 选择50条最新消息,按逆时间顺序排序。
  3. 如果结果超过50条记录,请抓住第50条记录的时间戳。
  4. 删除所有早于该朋友对的时间戳的记录。
  5. 有更简单的方法吗?我使用的是mysql。

    由于

1 个答案:

答案 0 :(得分:0)

一种不那么可怕的方式:

Add a counter to each message.
When there's a new message:
    Assign its counter a value of MAX(counters)+1.
    Also delete any message with a counter value less than (current_counter)-50.