Mysqlランダムソート実装


ランダムソート実装
実現構想:ランダムプールデータテーブルを生成し、データテーブルに予め定義された量のランダムデータを格納し、データを使用する際にランダム所定量シーケンス番号で関連付けて数を出す.
CREATE TABLE table_seq(
	id INT(11) DEFAULT 0 NOT NULL,
	seq INT DEFAULT 0 NOT NULL,
	seq_index BIGINT(21) NOT NULL
);

ランダム・データの書き込み(ランダム・プールを定期的に更新可能)
insert into table_seq
SELECT t.id,1 AS seq,(@rownum:=@rownum+1) AS seq_index
FROM (SELECT id FROM table ORDER BY RAND()) t,(SELECT @rownum:=0) t1;

使用時にランダムにシーケンス番号をキャッシュし、ページングクエリ時にシーケンス番号でクエリすればよい
select t1.* from table t1,table_seq t2
where t1.id=t2.id
  and t2.seq=1
order by t2.seq_index
limit 0,10