2012-04-22 72 views
2

我有一個MySQL表存儲與4列成員的消息:加快ORDER BY

  • MESSAGE_ID(主鍵,自動遞增)
  • SENDER_ID(鍵)
  • receiver_id(鍵)
  • MESSAGE_CONTENT

我做很多的SELECT 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「了。 這可能嗎?還是有其他解決方案?

謝謝

+0

供參考:成千上萬的行通常是RDBMS的兒童遊戲。索引幾乎總是解決性能問題的答案。 – JohnFx 2012-04-22 21:44:02

回答

4
  1. 指定3333爲整數,而不是字符串(去掉引號)
  2. 添加message_id列到sender_id指數(如果你使用MyISAM,因爲在InnoDB的它是由這樣自動添加稱爲「clustered index」)
+0

謝謝。將3333指定爲整數是否可以提高性能?或者還有沒有引號的其他原因? – David 2012-04-22 21:45:31

+1

message_id已經是主鍵,因此重新編制索引可能沒有多大幫助。 – 2012-04-22 21:45:54

+0

@Marc乙:如果他只使用innodb。不過說實在的,完全忘記了它 – zerkms 2012-04-22 21:46:52