FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Vad går snabbast om man vill hämta ut slumpade rader från en mysql-databas, generera slumpade index innan man skickar queryn eller använda sig av RAND()?
alt 1: Kod:
SELECT * FROM table WHERE id=12 OR id=9 OR id=1 OR id=35 OR id=41 LIMIT 0,5 Kod:
SELECT * FROM table ORDER BY RAND() LIMIT 0,5 / vic |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Flitig postare
|
RAND() gick snabbare för mig i när jag körde dessa queries i min databas.
Citat:
Citat:
|
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Banned
|
Testa med:
Kod:
SELECT * FROM tabell WHERE id IN (12,9,1,35,41) LIMIT 0 , 5 |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Supermoderator
|
RAND() är rent generellt ganska långsamt och bör normalt sett undvikas om möjligt, särskilt när det gäller större tabeller.
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Administratör
|
Att slumpa IDs innan och använda dessa i din IN-clause är enormt mycket snabbare när din data växt till sig lite.
Testkörde på en tabell med bara ett par hundra tusen rader och skillnaden blev ca 200ggr snabbare. Dock så ger dig inte den förslumpade lösningen garanterat träffar då man brukar ha borttagna rader i tabellerna vilket ger saknade ids.
__________________
eldefors.com - Personlig (teknik)-blogg |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Tack allesammans för svaren.
Jag kan tillägga att jag nu kör på en lösning i stil med följande: Kod:
<?php $start_id = mt_rand(0, $max_id_in_db-5); $db->query('SELECT * FROM table WHERE id > '.$start_id.' LIMIT 0,5'); |
||
![]() |
![]() |
Svara |
|
|