random functie MySQL betrouwbaar?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stefan van Iwaarden

Stefan van Iwaarden

13/02/2007 17:43:00
Quote Anchor link
Ik heb een prijsvraag op mijn website, en iedere twee weken wordt uit de ingezonden antwoorden in de tabel een winnaar gekozen.

Nu is het mij alleen opgevallen dat deze winnaar steeds gekozen wordt uit een van de laatst toegevoegde records. Ik heb nu 3 trekkingen gehad, en daarbij was het als volgt
4e vanaf het eind geteld
2e vanaf het eind geteld
4e vanaf het eind geteld

Ik vraag me dus af of de random functie van MySQL wel zo random is?

ik gebruik deze als volgt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ORDER BY RAND() LIMIT 1
 
PHP hulp

PHP hulp

20/11/2024 04:31:52
 
Thijs X

Thijs X

13/02/2007 17:47:00
Quote Anchor link
Als dat je Query is dan moet dat gewoon werken en is het toeval dat dat zo is gebeurd.
 
Frank -

Frank -

13/02/2007 17:55:00
Quote Anchor link
Ga eens gestructureerd testen: een keer of duizend de query uitvoeren levert een stuk betere resultaat op dan 3x...
 
Frank -

Frank -

13/02/2007 18:05:00
Quote Anchor link
Aanvulling: RAND() is overigens geen goed plan, het is een regelrechte aanslag op de performance van de database. Zie dit artikel over het hoe-en-waarom.
 
Thijs X

Thijs X

13/02/2007 18:16:00
Quote Anchor link
Frank schreef op 13.02.2007 18:05:
Aanvulling: RAND() is overigens geen goed plan, het is een regelrechte aanslag op de performance van de database. Zie dit artikel over het hoe-en-waarom.


Ik denk dat het voor dit geval niet zoveel uit maakt omdat hij immers 1 x in de 2 weken die Query uitvoerd ;)
 
Jelmer -

Jelmer -

13/02/2007 18:17:00
Quote Anchor link
Ik heb het ooit eens over de rand() in PHP zelf gehad. Niet een bepaald wetenschappelijke ontdekking, maar misschien wel leuk leesvoer: Topic #16226.
 
Frank -

Frank -

13/02/2007 18:29:00
Quote Anchor link
@Thijs: Performance is niet alleen een kwestie van hoevaak je de query uitvoert, maar ook hoeveel records er bij zijn betrokken. Zoals je in het artikel kunt lezen, was in hun test de query bijna een uur bezig om een random resultaat te trekken uit 1 miljoen records. En 1 miljoen is niet veel...

En waarom zou je de database zwaar belasten wanneer dat volkomen overbodig is?
 
Stefan van Iwaarden

Stefan van Iwaarden

13/02/2007 18:39:00
Quote Anchor link
Het random selecteren gaat over niet meer dan een paar honderd records op z'n hoogst. Dus die tijd valt nog te mee, en daarnaast wordt hij in een cronjob uitgevoerd, dus merk ik dat niet.

ik zal wel eens kijken of ik zometeen tijd heb om even een scriptje te schrijven en te testen of het echt random is.
 
Thijs X

Thijs X

13/02/2007 18:41:00
Quote Anchor link
Heb even snel scriptje gemaakt gewoon ID 1 tm 4 in een database gezet en volgende gerunt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$aantal_1 = 0;
$aantal_2 = 0;
$aantal_3 = 0;
$aantal_4 = 0;

for ($i = 0; $i < 100; $i++)
{
    $query = mysql_query("SELECT * FROM `rand` ORDER BY RAND() LIMIT 1") or die(mysql_error());
    $rand = mysql_fetch_assoc($query);
    
    if($rand['id'] == 1)
    {
        $aantal_1++;
    }
    if($rand['id'] == 2)
    {
        $aantal_2++;
    }
    if($rand['id'] == 3)
    {
        $aantal_3++;
    }
    if($rand['id'] == 4)
    {
        $aantal_4++;
    }
}

echo $aantal_1."% <br />";
echo $aantal_2."% <br />";
echo $aantal_3."% <br />";
echo $aantal_4."% <br />";
 
Leroy Boerefijn

Leroy Boerefijn

13/02/2007 19:01:00
Quote Anchor link
de php functie rand geeft volgensmij vaak hoge getallen.. hierdoor kun je dus eerder dezelfde getallen krijgen..
Dit zou dus ook zo kunnen zijn met de MySQL funtie ??
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.