Du har rätt, det kommer att tillämpa ORDER BY efter att ha minskat antalet rader med WHERE, GROUP BY och HAVING. Men det kommer att gälla ORDER BY före LIMIT.
Så om du filtrerar ner antalet rader tillräckligt, ja, ORDER BY RAND() kan uppnå vad du vill utan en stor prestandapåverkan. Det finns en legitim fördel med kod som är enkel och lätt att läsa.
Problemet kommer när du tänker din fråga bör reducera raderna till något litet, men med tiden när din data växer blir antalet rader som den behöver sortera stort igen. Eftersom din fråga då gör LIMIT 10 på det sorterade resultatet döljer det faktum att du utför ORDER BY RAND() på 500k rader. Du ser bara prestandan på ett mystiskt sätt bli sämre.
Jag har skrivit om alternativa metoder för att välja en slumpmässig rad i min bok SQL Antipatterns:Avoiding the Fallgropar med databasprogrammering , eller i andra svar här på Stack Overflow:
- Välja slumpmässiga rader med MySQL
- randomisera stor datamängd
- snabbval av en slumpmässig rad från en stor tabell i mysql