mysql_fetch_array() vs. mysql_fetch_object()

Door AtleX op vrijdag 7 december 2007 20:12 - Reacties (4)
Categorie: PHP, Views: 5.703

Sinds PHP4 kent PHP4 de functie mysql_fetch_object(). Deze is vergelijkbaar met mysql_fetch_array(), sterker nog, alleen het resultaat verschilt. Uit mysql_fetch_object() komen, verrassend, objecten en uit mysql_fetch_array() komt logischerwijs een array.

Qua snelheid zijn ze praktisch gelijk, zoals er in de documentatie op PHP.net al te lezen is:
FunctieTijd in seconden
mysql_fetch_array()0.8682
mysql_fetch_object()0.8504

Dit is het resultaat van de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$benchmark->StartSection("fetch_array");
for ($i = 0; $i < 10000; $i++)
{
    $arrayResults[] = mysql_fetch_array(mysql_query("SELECT *, COUNT(month) AS numberOfMonths FROM icon GROUP BY year"));
}
$benchmark->EndSection("fetch_array");

$arrayResults = Array();

$benchmark->StartSection("fetch_object");
for ($i = 0; $i < 10000; $i++)
{
    $arrayResults[] = mysql_fetch_object(mysql_query("SELECT *, COUNT(month) AS numberOfMonths FROM icon GROUP BY year"));
}



Wat me wel opviel was het geheugengebruik, waar objecten in PHP bijna altijd een hogere memory usage tot gevolg hebben was het resultaat hier behoorlijk anders. Mysql_fetch_array() heeft bij bovenstaande code bijna 2MB 1.3MB (thanks EdwinG) meer nodig dan mysql_fetch_object:
FunctieGeheugen (KB)
mysql_fetch_array()7174.34
mysql_fetch_object()5832.20


Een niet geheel onbelangrijk verschil lijkt, en zeker de moeite waard om hier morgen nog wat onderzoek aan te besteden.

Update
Het vervolg: mysql_fetch_array() vs. mysql_fetch_object() (2)

Volgende: We've got a winner 12-'07 We've got a winner
Volgende: PHP performance testen 12-'07 PHP performance testen

Reacties


Door Tweakers user EdwinG, vrijdag 7 december 2007 20:48

Het verschil is in het voobeeld 1,3 MB, niet iets wat ik zou omschrijven als 'bijna 2MB'.

Door Tweakers user Dutchmega, vrijdag 7 december 2007 21:13

Met welke PHP versie is dit? Dat is wel belangrijke informatie
En hoe zit het met het opvragen van de informatie? Ik roep maar wat maar misschien is het opvragen vanuit een object slomer?

Door Tweakers user AtleX, zaterdag 8 december 2007 10:05

@EdwinG: Hoofdrekenen is niet mijn sterkste kant. :+

@DutchMega: PHP 5.2.1/win32 en PHP5.2.1/Linux. Het opvragen van de gegevens uit de objecten en uit de array's moet ik nog testen, maar ik daar had ik gisteren geen zin meer in.

Door Tweakers user TMDevil, maandag 17 december 2007 11:02

Ik denk dat de mysql_fetch_array functie meer gebruikt doordat de waardes standaard dubbel zijn opgeslagen (zowel met column nr als column name). Vraag me af wat er met het geheugen gebruik gebeurt zodra je gebruik maakt van MYSQL_ASSOC of MYSQL_NUM.

Reageren is niet meer mogelijk