sql >> Database teknologi >  >> RDS >> Mysql

Hvornår fungerer MySQL ORDER BY RAND() i rækkefølge?

Du har ret, det vil anvende ORDER BY efter at have reduceret antallet af rækker med WHERE, GROUP BY og HAVING. Men det vil gælde ORDER BY inden LIMIT.

Så hvis du filtrerer antallet af rækker tilstrækkeligt ned, ja, ORDER BY RAND() kan muligvis opnå det, du ønsker, uden en stor præstationspåvirkning. Der er en legitim fordel ved kode, der er enkel og let læselig.

Problemerne kommer, når du tænker din forespørgsel burde reducere rækkerne til noget lille, men over tid, efterhånden som dine data vokser, bliver antallet af rækker, det skal sortere, stort igen. Da din forespørgsel så gør LIMIT 10 på det sorterede resultat skjuler det faktum, at du udfører ORDER BY RAND() på 500k rækker. Du ser bare, at ydeevnen på mystisk vis bliver dårligere.

Jeg har skrevet om alternative metoder til at vælge en tilfældig række i min bog SQL Antipatterns:Avoiding the Faldgruber ved databaseprogrammering , eller i andre svar her på Stack Overflow:



  1. Oracle SQL-udvikler:Vis REFCURSOR-resultater i gitter?

  2. Sådan konverteres PostgreSQL 9.4's jsonb-type til at flyde

  3. Den angivne nøgle var ikke til stede i ordbogen. med mysql

  4. Rangering af fælles positioner i MySQL