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ı?
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.