sql >> Databasteknik >  >> RDS >> Mysql

Bra idé/dålig idé? Använder du MySQL RAND() utanför en liten uppsättning delfrågeresultat?

Det slutade med att jag körde ett test och jag kanske har svarat på min egen fråga. Jag tänkte lägga upp den här informationen här om den skulle vara användbar för någon annan. (Om jag har gjort något fel här, vänligen meddela mig!)

Det här är lite överraskande...

I motsats till allt jag har läst skapade jag en tabell som heter TestData med 1 miljon rader och körde följande fråga:

VÄLJ * FRÅN TestData WHERE nummer =41 ORDER BY RAND() LIMIT 8

...och det returnerade raderna på i genomsnitt 0,0070 sekunder. Jag förstår inte riktigt varför RAND() har ett så dåligt rykte. Det verkar ganska användbart för mig, åtminstone i den här speciella situationen.

Jag har tre kolumner i min tabell:

id [BIGINT(20)] | textfält [liten text] | nummer [BIGINT(20)]

Primär nyckel på id, index på nummer.

Jag antar att MySQL är smart nog att veta att det bara ska tillämpa RAND() på de 20 raderna som returneras av "WHERE number =41" ? (Jag lade specifikt till endast 20 rader som hade värdet 41 för 'nummer'.)

Den alternativa underfrågemetoden returnerar resultat med en genomsnittlig tid på cirka 0,0080 sekunder, vilket är långsammare än metoden utan underfråge.

Subquery-metod:SELECT * FROM (SELECT * FROM TestData WHERE number =41) som t ORDER BY RAND() LIMIT 8



  1. mysql-frågeresultat till php-array

  2. MariaDB LIMIT uttalande ger mer än gränsen

  3. Doctrine QueryBuilder:ManyToOne-relation där mer än en subEntity måste matcha

  4. MariaDB sammansatta datum- och tidsenheter förklaras