sql >> Database >  >> RDS >> Mysql

Goed idee/slecht idee? MySQL RAND() gebruiken buiten een kleine set subqueryresultaten?

Eigenlijk... heb ik uiteindelijk een test gedaan en had ik misschien mijn eigen vraag beantwoord. Ik dacht dat ik deze informatie hier zou plaatsen voor het geval het nuttig zou zijn voor iemand anders. (Als ik hier iets verkeerd heb gedaan, laat het me dan weten!)

Dit is nogal verrassend...

In tegenstelling tot alles wat ik heb gelezen, heb ik een tabel gemaakt met de naam TestData met 1 miljoen rijen en de volgende query uitgevoerd:

SELECTEER * VAN TestData WAAR nummer =41 ORDER BY RAND() LIMIT 8

...en het gaf de rijen terug in gemiddeld 0,0070 seconden. Ik begrijp niet echt waarom RAND() zo'n slechte reputatie heeft. Het lijkt me best bruikbaar, althans in deze specifieke situatie.

Ik heb drie kolommen in mijn tabel:

id [BIGINT(20)] | tekstveld [tinytext] | nummer [BIGINT(20)]

Primaire sleutel op id, index op nummer.

Ik denk dat MySQL slim genoeg is om te weten dat het alleen RAND() zou moeten toepassen op de 20 rijen die worden geretourneerd door "WHERE number =41" ? (Ik heb specifiek slechts 20 rijen toegevoegd die de waarde 41 hadden voor 'getal'.)

De alternatieve subquerymethode retourneert resultaten met een gemiddelde tijd van ongeveer .0080 seconden, wat langzamer is dan de niet-subquerymethode.

Subquerymethode:SELECT * FROM (SELECT * FROM TestData WHERE number =41) as t ORDER BY RAND() LIMIT 8



  1. Groeperen op waarde RAND()

  2. Uniques afdwingen over meerdere tabellen

  3. Mysql - Groeperen op maand met Y-m-d-formaat

  4. ISJSON() Voorbeelden in SQL Server (T-SQL)