タグ

ブックマーク / d.hatena.ne.jp/mtomiz (1)

  • MySQLでランダムにレコードをselectする。パフォーマンス対策3つ。 - mtomizの日記

    例えばMySQLのデータベースからWEBサイト上にランダムに商品情報や広告情報を取得して、10件程度表示させたいとする。単純に、SELECT * FROM table ORDER BY RAND();を使用することが考えられるが、ランダム取得すると全件取得と同じ負荷がかかるので、データ件数が数万件以上あるような場合処理パフォーマンスが問題となる。したがって、SELECT * FROM table ORDER BY RAND() limit 0, 10;として10件ランダムに取得しようとしても全件取得相当の処理パフォーマンスとなり実用的ではない。【対策】1.取得するカラムが少ないのであれば*ではなくselect id,name,price from table order by rand() limit 0,10; などとするとかなり早い2.ランダムに”切り取る”ことができれば10件は連続し

    J138
    J138 2010/06/08
  • 1