MySQL: ORDER BY RAND()

Sebenernya ini mah topik lama, pas dulu masih pake symfony, tapi masih lumayan lah, soalnya banyak yg belom tau.

Dulu di minta menampilkan data dari table yg diambil secara random, yg gw tau sih pake RAND(), cuman... di symfony gmn caranya? Setelah search ke forumnya (ke forumnya dulu kalo ada, baru ke oom gugel) nemu pernyataan yg baru gw tau, ternyata RAND() itu, kalo di pake di table yang banyak banget datanya, bisa bikin lemot!

Gw juga nemuin artikel yang bilang jangan pake RAND(), gw nemu artikel tadi dari halaman forum yang sama.

Karena penasaran, gw coba tanya oom gugel, salah satunya adalah diskusi di forum mysql nya sendiri.

Ini gw coba sendiri dengan table yg masih sedikit, (12 ribu data):

  1. dengan RAND()

    SELECT * FROM contents ORDER BY RAND() LIMIT 1

    hasilnya adalah: 0.3527 sec

  2. dengan random(id) (random id ini hasil generate dari script)

    SELECT * FROM contents WHERE id IN ($RAND) LIMIT 1,1

    hasilnya: 0.0209 sec

    $RAND ini gw bikin dengan php: $RAND = join(',', range(1,50));
    heheh ya ya gw tau ini gak bagus, tapi cuman buat test aja

  3. yg ketiga gw ngikutin cara dari forum mysql itu.

    SELECT t.id FROM contents t JOIN (SELECT(FLOOR(max(id) * rand())) as maxid FROM contents) as tt on t.id >= tt.maxid LIMIT 1

    hasilnya: 0.0071 sec

Yang ketiga itu ternyata jauh lebih cepet.


Preview:
  • Fields with * are required
  • E-mail will not publish
  • Using Markdown
  • With Antispam Enable, contact me if you're not spammer

Open comment form


Comments:

#13857

Thanks for the tip, bro.

Btw, blog nya keren! Khususnya bagian text-to-image. Tadi gw test-test. :)

Idenya keren!

#13858

sama2 bro, makasih juga buat "image-title"-nya :)

blognya masih belom kelar, dan gak tau kapan mau di beresin hehe..



Spam Count: 532