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.