Doc #52127 [Fbk->Opn]: mysl_fetch_assoc is much slower than mysql_fetch_row

From: Date: Mon, 21 Jun 2010 20:33:18 +0000
Subject: Doc #52127 [Fbk->Opn]: mysl_fetch_assoc is much slower than mysql_fetch_row
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-4580@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=52127&edit=1 ID: 52127 User updated by: skyeye at o2 dot pl Reported by: skyeye at o2 dot pl Summary: mysl_fetch_assoc is much slower than mysql_fetch_row -Status: Feedback +Status: Open Type: Documentation Problem Package: *General Issues Operating System: CentOS PHP Version: 5.3.2 New Comment: With this code (please test it for any database that has large number of records and columns): function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } echo "<font color='green'>1. mysql_fetch_assoc() + array</b></font>"; $link = mysql_connect(HOST,USER,PASS); mysql_select_db(DB,$link); $result = mysql_query("SELECT ... FROM ... ORDER BY '...' DESC LIMIT 300"); mysql_close($link); $start = microtime_float(); while($tab1 = mysql_fetch_assoc($result)) { } $stop = microtime_float(); echo "<BR><BR>".($stop - $start)." [s]."; echo "<BR><BR><font color='green'>2. mysql_fetch_row + array</b></font>"; $start = microtime_float(); while($tab2 = mysql_fetch_row($result)) { } $stop = microtime_float(); echo "<BR><BR>".($stop - $start)." [s]."; echo "<BR><BR><font color='green'>3. mysql_fetch_row + list()</b></font>"; $start = microtime_float(); while(list([variables for all 42 columns]) = mysql_fetch_row($result)) { } $stop = microtime_float(); echo "<BR><BR>".($stop - $start)." [s]."; echo "<BR><BR><font color='green'>4. mysql_fetch_row() + foreach()</b></font>"; while($info = mysql_fetch_row($result)) { foreach($info as $field); } $stop = microtime_float(); echo "<BR><BR>".($stop - $start)." [s]."; echo "<BR><BR><font color='green'>5. mysql_fetch_object()</b></font>"; while($object = mysql_fetch_row($result)) { } $stop = microtime_float(); echo "<BR><BR>".($stop - $start)." [s]."; Previous Comments: ------------------------------------------------------------------------ [2010-06-21 02:13:43] philip@php.net Benchmarked with what code? ------------------------------------------------------------------------ [2010-06-19 18:13:22] skyeye at o2 dot pl Description: ------------ "Note: Performance An important thing to note is that using mysql_fetch_assoc() is not significantly slower than using mysql_fetch_row(), while it provides a significant added value. " I compared mysql_fetch_assoc() and mysql_fetch_row(). These results show that there is a huge difference between these functions. Times for fetching 90000 records (there are 42 columns): 1. mysql_fetch_assoc() + array 2.20659708977 [s]. 2. mysql_fetch_row + array 1.21593475342E-5 [s]. 3. mysql_fetch_row + list() 2.40802764893E-5 [s]. 4. mysql_fetch_row() + foreach() 4.19616699219E-5 [s]. 5. mysql_fetch_object() 5.91278076172E-5 [s]. Times for fetching 50 records (there are 42 columns): 1. mysql_fetch_assoc() + array 0.00150012969971 [s]. 2. mysql_fetch_row + array 1.09672546387E-5 [s]. 3. mysql_fetch_row + list() 2.78949737549E-5 [s]. 4. mysql_fetch_row() + foreach() 4.19616699219E-5 [s]. 5. mysql_fetch_object() 5.50746917725E-5 [s]. Times for fetching 1 record (there are 42 columns): 1. mysql_fetch_assoc() + array 0.000169038772583 [s]. 2. mysql_fetch_row + array 9.77516174316E-6 [s]. 3. mysql_fetch_row + list() 3.50475311279E-5 [s]. 4. mysql_fetch_row() + foreach() 4.91142272949E-5 [s]. 5. mysql_fetch_object() 6.29425048828E-5 [s]. Times for fetching 90000 records (there is 1 column): 1. mysql_fetch_assoc() + array 0.10712313652 [s]. 2. mysql_fetch_row + array 1.4066696167E-5 [s]. 3. mysql_fetch_row + list() 4.88758087158E-5 [s]. 4. mysql_fetch_row() + foreach() 6.98566436768E-5 [s]. 5. mysql_fetch_object() 8.98838043213E-5 [s]. Times for fetching records (there is 1 column): 1. mysql_fetch_assoc() + array 0.000155925750732 [s]. 2. mysql_fetch_row + array 1.09672546387E-5 [s]. 3. mysql_fetch_row + list() 4.29153442383E-5 [s]. 4. mysql_fetch_row() + foreach() 6.29425048828E-5 [s]. 5. mysql_fetch_object() 8.01086425781E-5 [s]. Times for fetching 1 records (there is 1 column): 1. mysql_fetch_assoc() + array 0.000102996826172 [s]. 2. mysql_fetch_row + array 1.31130218506E-5 [s]. 3. mysql_fetch_row + list() 4.29153442383E-5 [s]. 4. mysql_fetch_row() + foreach() 5.79357147217E-5 [s]. 5. mysql_fetch_object() 7.20024108887E-5 [s]. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52127&edit=1

« previous php.doc.bugs (#4580) next »