skip to main
|
skip to sidebar
MK's Memorandum
2009年12月27日日曜日
MySQL でレコードのランダム抽出をするには
ORDER BY RAND() で OK。
ただ、全レコードに対してランダムな数値を与えてインデックスなしでソートするのでそれなりのコストがかかる。
この場合の計算量はどうなんだろう。ソートの実装がどうなっているのかは知らないので確かなことは分からないけれど、LIMIT をつけずに全レコードをランダムソートするならば計算量はよくて O(N log N)程度のはず。LIMIT で K 件(K < log N)を抽出する場合は、愚直にやっても O(KN)あればできる。
よって、1件ずつランダム抽出していくような場合は大して問題にならないが、リストとしてまとめてランダムに並んだレコードを取り出したい、というような場合にはあまり効率的でない。
そういった場合には事前にインデックスつきのフィールドに RAND() を書き込んでおいて、取得したいときにそのフィールドで ORDER BY してやったほうがいいはず。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
ラベル
Development
(5)
Django
(2)
Google Chrome Extensions
(10)
Web Application
(5)
登録
投稿
Atom
投稿
コメント
Atom
コメント
フォロワー
ブログ アーカイブ
►
2010
(2)
►
2月
(1)
►
1月
(1)
▼
2009
(18)
▼
12月
(6)
MySQL でレコードのランダム抽出をするには
Django の ModelForm / ModelFormSet まとめ
ruby in HTML
Django の分からないところ
あす楽がよかった
Google の日本語インプットメソッドを使ってみた
►
11月
(5)
►
10月
(7)
自己紹介
MK
A graduate student in Japan.
詳細プロフィールを表示
0 件のコメント:
コメントを投稿