Je hebt gelijk, het zal de ORDER BY toepassen na het verminderen van het aantal rijen met WHERE, GROUP BY en HAVING. Maar het zal ORDER BY vóór LIMIT toepassen.
Dus als je het aantal rijen voldoende filtert, dan kan de ORDER BY RAND() inderdaad bereiken wat je wilt zonder grote prestatie-impact. Er is een legitiem voordeel aan code die eenvoudig en gemakkelijk leesbaar is.
Het probleem komt wanneer je denkt uw query zou de rijen tot iets kleins moeten reduceren, maar na verloop van tijd, naarmate uw gegevens groeien, wordt het aantal rijen dat nodig is om te sorteren weer groot. Aangezien uw zoekopdracht vervolgens LIMIT 10 op het gesorteerde resultaat doet, verbergt u het feit dat u ORDER BY RAND() uitvoert op 500k rijen. Je ziet de prestaties op mysterieuze wijze slechter worden.
Ik heb in mijn boek SQL Antipatterns:Avoiding the Valkuilen bij het programmeren van databases , of in andere antwoorden hier op Stack Overflow:
- Willekeurige rijen selecteren met MySQL
- het randomiseren van grote datasets
- snelle selectie van een willekeurige rij uit een grote tabel in mysql