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

God ide/dårlig idé? Bruger du MySQL RAND() uden for et lille sæt underforespørgselsresultater?

Faktisk ... endte jeg med at køre en test, og jeg kunne have svaret på mit eget spørgsmål. Jeg tænkte, at jeg ville poste denne information her, hvis den var nyttig for andre. (Hvis jeg har gjort noget forkert her, så lad mig det vide!)

Det er lidt overraskende...

I modsætning til alt, hvad jeg har læst, oprettede jeg en tabel kaldet TestData med 1 million rækker og kørte følgende forespørgsel:

VÆLG * FRA TestData WHERE nummer =41 BESTIL EFTER RAND() LIMIT 8

...og det returnerede rækkerne på et gennemsnit på 0,0070 sekunder. Jeg kan ikke rigtig se, hvorfor RAND() har så dårligt et ry. Det forekommer mig ret brugbart, i hvert fald i denne særlige situation.

Jeg har tre kolonner i min tabel:

id [BIGINT(20)] | tekstfelt [lilletekst] | nummer [BIGINT(20)]

Primær nøgle på id, indeks på nummer.

Jeg gætter på, at MySQL er smart nok til at vide, at den kun skal anvende RAND() på de 20 rækker, der returneres af "Hvor nummer =41"? (Jeg tilføjede specifikt kun 20 rækker, der havde værdien 41 for 'nummer'.)

Den alternative underforespørgselsmetode returnerer resultater med en gennemsnitlig tid på omkring 0,0080 sekunder, hvilket er langsommere end metoden uden underforespørgsel.

Underforespørgselsmetode:SELECT * FROM (SELECT * FROM TestData WHERE number =41) som t ORDER BY RAND() LIMIT 8



  1. Google Cloud SQL - FEJL 2003 (HY000):Kan ikke oprette forbindelse til MySQL

  2. SQLSTATE[HY093]:Ugyldigt parameternummer:antallet af bundne variable matcher ikke antallet af tokens på linje 102

  3. hvordan tilføjer man superprivilegier til mysql-databasen?

  4. Hvordan trækker man data fra en MySQL-database ind i et stylesheet i sin egen fil/mappe?