2

我有一个存储成员消息的 mysql 表,其中包含 4 列:

  • message_id(主键,自动递增)
  • sender_id(键)
  • receiver_id(键)
  • 消息内容

我做了很多SELECTs 并且我总是按 s 对它们进行排序message_id DESC,查询如下:

SELECT message_content 
FROM table 
WHERE sender_id='3333' 
ORDER BY message_id DESC 
LIMIT 30

在这样的查询中,这ORDER BY是昂贵的(它通常必须对数千行进行排序,当每秒乘以许多请求时会产生一些负载)

有没有办法避免每次都对表格进行排序?由于我总是希望以相同的顺序检索结果,并且由于 message_id 列不会随时间变化,因此如果每个新表行都插入到第一个位置,则表将始终被排序,我不需要任何“ORDER BY”了。那可能吗 ?还是有其他解决方案?

谢谢

4

1 回答 1

4
  1. 指定3333为整数,而不是字符串(删除引号)
  2. message_id列添加到sender_id索引(如果您使用 myisam,因为在 innodb 中它是由所谓的“聚集索引”自动添加的)
于 2012-04-22T21:43:07.647 回答