zaciekawił mnie temat , bo od czasu do czasu też korzystałem z RAND bez jakiegoś szczególnego przemyślenia. Zrobiłem mały test , może ktoś ma chwilę i potwierdzi lub ... ?
test-1 Kod
$sql = SELECT * FROM tab WHERE param1 =1 ORDER BY RAND() LIMIT 5
test-2 Kod
$sql = SELECT * FROM tab WHERE param1 =1 ORDER BY crc32(concat(unix_timestamp(),id)) LIMIT 5
test-3 Kod
$sql1 = 'SELECT MAX(id) as max , MIN(id) as min FROM tab
$Rand - tablica pięcoelementowa z rand(min,max), bez duplikatów
$sql2 = SELECT * FROM tab WHERE param1 =1 AND id IN ($Rand);
Poniżej czas wykonania 100 razy danego testu na tabelach z określoną ilością rekordów
Kod
+--------------+-------------------------+------------------------+------------------------+
| tab/test | test-1 | test-2 | test-3 |
+--------------+-------------------------+------------------------+------------------------+
| 0,1 k | 0.097609996795654 | 0.10826182365417 | 0.21252417564392 |
| 1 k | 0.411727905273440 | 0.37512493133545 | 0.11276888847351 |
| 10 k | 2.324110031127900 | 1.72308802604680 | 0.13337612152100 |
| 100 k | 30.56501388549800 | 8.64563798904420 | 0.16905999183655 |
1 500 k | 495.1988191604600 | 38.3752229213710 | 0.17194390296936 |
+--------------+-------------------------+------------------------+------------------------+