2

4列のメンバーメッセージを格納するmysqlテーブルがあります:

  • message_id(主キー、自動インクリメント)
  • sender_id(キー)
  • Receiver_id(キー)
  • message_content

私はたくさんのことをします、SELECTそして私はいつもそれらを次の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 に答える