wiem, że było już o tym kilka tematów ale przedstawione tam rozwiązania są zbyt nieoptymalne. To co było tam podane nadaje się co najwyżej do tablicy zawierającej 100 rekordów, a ja mam niestety ponad 50 tysięcy więc muszę wymyśleć jakiś alternatywny sposób.
Skracając trochę zapytanie, które używam na potrzeby tego problemu, wygląda one tak:
SELECT * FROM tabela WHERE points>0 ORDER BY Rand()*(1/points) LIMIT 5
Problem sprawia tutaj klauzula ORDER BY.. próba sortowania tablicy 50k rekordów co około 2 sekundy, to samo(/serwero)bójstwo :|
W jaki inny sposób mogę to zrealizować, nawet jakbym miał losować po jednym rekordzie a nie pięć naraz? Bardzo mi zależy na prędkości działania, mogą być w tym jeszcze jakieś wstawki z PHP bo na nim opiera się cały skrypt.
Osoby słabo znające się na MySQLu proszę o nie odpowiadanie, jeżeli nie rozumiecie tematu... Te zagadnienie niestety nie wygląda na proste.