MySQL Server veya PHP birçok sonuç rastgele bağlamamak

4 Cevap php

Daha hızlı randomize MySQL sunucusunda veya PHP verileri aldıktan sonra sonuçları büyük bir set sıralama düzeni için mi?

Herkes yedekleme iki tarafında, hatta anekdot deneyim için herhangi bir veri var mı?

4 Cevap

Benim tahminim eğitimli MySQL eller aşağı kazanır olmasıdır. Verilerin bu şekilde işlemek için yapılmış. Sıralama için PHP üzerinden tüm veri taşımak zorunda sırf havai o önyükleme için bir advantange verir.

Sen ki, bazı kıyaslama yaparak kendiniz bulabilirsiniz.

Emin için MySQL tarafta bunu yapmak gerekir.

Ama bu ORDER BY RAND() very MySQL verimsiz bunu gerektirir beri filesort olduğunu unutmayın.

Etkin tek bir tablo taraması ile 10 rastgele satır seçmek için nasıl bakın:

SELECT  *
FROM    (
        SELECT  @cnt := COUNT(*) + 1,
                @lim := 10
        FROM    t_random
        ) vars
STRAIGHT_JOIN
        (
        SELECT  r.*,
                @lim := @lim - 1
        FROM    t_random r
        WHERE   (@cnt := @cnt - 1)
                AND RAND() < @lim / @cnt
        ) i

Performans ayrıntıları için bloguma bu makaleye bakın:

Bir 1,000,000 kayıtları tablo, o çalışır yerine kullanarak 15 saniye bir saniyeden az ORDER BY RAND().

MySQL RAND () kullanarak definitely daha hızlı olacaktır.

PHP ile randomise için, db sorgulamak ve belleğe veri itmek gerekir, böylece sıralama sürecine yükü ekleyerek bir bütün ekstra adım var.

MySQL, bu tür sorgu, bir endekslenmiş değer ile sipariş kadar hızlı olmayacak, ama yine de son derece optimize olacaktır.

Eğer deyimi ile düzenin nesnesi olarak rand () kullanın Not:

  select * from foo_table order by rand() limit 100