Tue, 18 May 2004 at 12:54 GMT Leif wrote
>
> "Morten Guldager" <spamtrap@mogul.dk> skrev i en meddelelse
> news:slrncaib4a.f9q.spamtrap@linuxine.mogul.dk...
>> Hejsa,
>>
>> Til noget stikprøve kontrol har jeg brug for at plukke en
>> tilfældig række fra en tabel i mysql.
>>
>> Jeg prøvede med:
>>
>> select * from big_mother_fucker order by rand() limit 1;
>>
>> Det virker men koster en 100 års full table scan. (eller
>> ihvertfald alt for lang tid, og alt for meget disk IO + CPU)
>>
>> Bedre forslag?
>
> Lav et tilfældigt tal mellem 0 og num_rows.
> brug derefter limit $tal,1 til at hente en record.
Ok, jeg tror nok jeg har fanget den overordnede ide, men der er
et par ting jeg ikke forstår ved dit løsningsforslag.
- num_rows, hvad er det for en fætter? Så vidt jeg kan se er det
ikke en intern MySQL funktion.
- explain siger at jeg stadig kommer igennem en full table scan.
Det er dog stadig hurtigere at plukke den sidste række med limit
end det er at udføre sort by rand() tingen. Det er muligvis udelukkende
en CPU flaskehals jeg har. Ikke at det ændrer ret meget.
/Morten