2011年12月28日水曜日

fund_indicesは銘柄の基準価額、純資産や分配金の履歴テーブル、巨大なテーブルです。
やりたいことは重複なしでランダムで3銘柄IDを抽出したい。fund_idじゃなくidはプライマリーキーです。
fund_idは重複している。データ全部で280万くらい。

id fund_id as_of_date value
1 529 20111130 5394
2 529 20111129 5384
3 529 20111128 5323
4 529 20111125 5312
5 529 20111124 5312
6 529 20111122 5366
7 529 20111121 5397
8 545 20111129 5374
9 545 20111128 5373
10 545 20111125 5372
11 545 20111124 5312
12 545 20111122 5376
13 545 20111121 5377
... ... ... ...

mysqlのorder by rand()を使ったが、凄く遅い!なんと1分もかかります。

sql> select distinct fund_id from fund_indices order by rand() limit 3;

fund_idを絞るサブクエリを入れると凄く早くなった

sql> select fund_id from (select distinct fund_id from fund_indices) order by rand() limit 3;
表示中の列 0 - 2 (~31 合計, クエリの実行時間 0.0495 秒)



0 件のコメント:

コメントを投稿