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

Hurtigste tilfældige valg HVOR kolonne X er Y (NULL)

At få en virkelig tilfældig registrering kan være langsom. Der er ikke rigtig meget at komme uden om dette faktum; hvis du vil have det virkelig tilfældigt, så skal forespørgslen indlæse alle relevante data for at vide, hvilke poster den har at vælge imellem.

Heldigvis er der dog hurtigere måder at gøre det på. De er ikke ordentligt tilfældige, men hvis du er glad for at bytte lidt ren tilfældighed for hastighed, så burde de være gode nok til de fleste formål.

Med det i tankerne er den hurtigste måde at få en "tilfældig" post på at tilføje en ekstra kolonne til din DB, som er udfyldt med en tilfældig værdi. Måske en saltet MD5-hash af primærnøglen? Uanset hvad. Tilføj passende indekser på denne kolonne, og tilføj derefter blot kolonnen til din ORDER BY klausul i forespørgslen, og du får dine poster tilbage i en tilfældig rækkefølge.

For at få en enkelt tilfældig post skal du blot angive LIMIT 1 og tilføj et WHERE random_field > $random_value hvor tilfældig værdi ville være en værdi i området for dit nye felt (f.eks. en MD5-hash af et tilfældigt tal).

Naturligvis er ulempen her, at selvom dine poster vil være i en tilfældig rækkefølge, vil de sidde fast i den samme tilfældige rækkefølge. Jeg sagde, at det handlede perfektion for forespørgselshastighed. Du kan komme uden om dette ved at opdatere dem med jævne mellemrum med nye værdier, men jeg gætter på, at det kan være et problem for dig, hvis du skal holde det friskt.

Den anden ulempe er, at tilføjelse af en ekstra kolonne kan være for meget at spørge om, hvis du har lagerbegrænsninger, og din DB allerede er massiv i størrelse, eller hvis du har en streng DBA at komme forbi, før du kan tilføje kolonner. Men igen, du skal bytte noget; hvis du vil have forespørgselshastigheden, skal du bruge denne ekstra kolonne.

Jeg håber i hvert fald, at det hjalp.



  1. Konverter værdi fra strengrepræsentation i basis N til numerisk

  2. Konfiguration af Oracle-lytter til at lytte eksternt

  3. Importer .sql-fil i pgadmin iii

  4. MySQL - Optælling af rækker og venstre join-problem