これに最適な MySQL ソリューションは次のとおりです...
まず、テーブルを InnoDB テーブルとして作成し、書き込み時のテーブル ロックを防ぎます。
CREATE TABLE chat_messages (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
....
message VARCHAR(255) NOT NULL
) ENGINE=InnoDB;
必要に応じて、クエリを実行する前に、トランザクション分離レベルを「read uncommitted」に設定すると、実行前にロックが解放されるのを待機しなくなります。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
次に、id DESC と LIMIT 10 で並べ替えて、最後の 10 レコードをクエリします。これは、クラスター化インデックス (主キー) を使用して並べ替えを行うため、非常に高速です。
SELECT *
FROM chat_messages
ORDER BY id DESC LIMIT 10
最後に、夜間に cron でクリーンアップ プロセスを実行して、アクティビティが少ないときにチャット メッセージを削除できます。
0 0 * * * mysql -hlocalhost -uusername -ppassword -e "DELETE FROM chat_messages WHERE id < (SELECT MAX(id) - 10 FROM chat_messages)"