| 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 |
||
|
|
Svara med citat
|
|
|
#2 | |||
|
||||
|
Flitig postare
|
RAND() gick snabbare för mig i när jag körde dessa queries i min databas.
Citat:
Citat:
|
|||
|
|
Svara med citat
|
|
|
#3 | ||
|
|||
|
Banned
|
Testa med:
Kod:
SELECT * FROM tabell WHERE id IN (12,9,1,35,41) LIMIT 0 , 5 |
||
|
|
Svara med citat
|
|
|
#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 |
||
|
|
Svara med citat
|
|
|
#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 |
||
|
|
Svara med citat
|
|
|
#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 med citat
|
| Svara |
|
|