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)
SVG Graph Generator
►
1月
(1)
単純な .screenrc の紹介
▼
2009
(18)
▼
12月
(6)
MySQL でレコードのランダム抽出をするには
Django の ModelForm / ModelFormSet まとめ
ruby in HTML
Django の分からないところ
あす楽がよかった
Google の日本語インプットメソッドを使ってみた
►
11月
(5)
事業仕分けに関する声明発表を聞いてきた
Command Line Browser 0.6
Google Preview for Chrome 0.5
Command Line Browser 0.5
Command Line Browser 0.4
►
10月
(7)
Google Preview for Chrome 0.4
Command Line Browser 0.3
Updated Command Line Browser
Updated Google Preview for Chrome
Command Line Interface for Chrome
Updated Google Preview for Chrome
Google Preview for Chrome
自己紹介
MK
A graduate student in Japan.
詳細プロフィールを表示
0 コメント:
コメントを投稿