Berikut adalah hasil pengujian dari penggunaan fungsi MySQL dibandingkan dengan MySQLidibandingkan dengan PDO. Pengujian dilakukan dengan PHP 5.3.10, MySQL 5.5.29, Kernel 3.2.0, 64bit, 3.4GHz (QEMU).
Kesimpulan yang diambil:
MySQLi adalah 3-4 kali lebih lambat daripada MySQL saat mengambil data kurang dari 500 dataset.
MySQLi adalah 2-4 kali lebih cepat daripada MySQL saat mengambil data lebih dari 500 dataset.
PDO adalah 2-5 lebih lambat daripada MySQL/MySQLi.
Query tanpa buffer
Query tanpa buffer adalah 15-40 persen lebih cepat dibandingkan Query dengan buffer di MySQLi.
Query tanpa buffer adalah 10-25 persen lebih cepat dibandingkan Query dengan buffer di MySQL untuk data kurang dari 10.000 dataset.
Query tanpa buffer adalah 3-7 persen lebih lambat dibandingkan Query dengan buffer di MySQL untuk data lebih dari 10.000 dataset.
Query tanpa buffer adalah 0-5 persen lebih cepat dibandingkan Query dengan buffer di PDO.
PHP Non thread safe pada win32 adalah 50 persen lebih cepat dibandingkan Thread safe.
Ini contoh skrip testingnya
$table = 'test1.test2'; benchmark($table, 100); benchmark($table, 500); benchmark($table, 1000); benchmark($table, 5000); benchmark($table, 10000); benchmark($table, 50000); benchmark($table, 100000); function benchmark($table, $size) { mysql_connect('127.0.0.1', 'root', ''); mysql_query('drop table if exists '.$table); mysql_query("CREATE TABLE $table (id int(11) AUTO_INCREMENT, str1 varchar(255), str2 varchar(255), PRIMARY KEY (id)) ENGINE=INNODB"); mysql_query("begin"); for ($i=0; $i<$size; $i++) { mysql_query("insert into $table values(null, 'hello$i', 'world$i')"); } mysql_query("commit"); // warm up mysql cache $db = new PDO('mysql:host=127.0.0.1', 'root', ''); foreach ($db->query('select * from '.$table) as $vals) $test = $vals; $start = microtime(true); mysql_connect('127.0.0.1', 'root', ''); $result = mysql_query('select * from '.$table); while ($row = mysql_fetch_assoc($result)) $test = $row; echo $size.' mysql-buffered '.number_format(microtime(true)-$start, 5)."n"; $start = microtime(true); mysql_connect('127.0.0.1', 'root', ''); $result = mysql_unbuffered_query('select * from '.$table); while ($row = mysql_fetch_assoc($result)) $test = $row; echo $size.' mysql-unbuffered '.number_format(microtime(true)-$start, 5)."n"; $start = microtime(true); $db = mysqli_connect('127.0.0.1', 'root', ''); foreach (mysqli_query($db, 'select * from '.$table) as $row) $test = $row; echo $size.' mysqli-buffered '.number_format(microtime(true)-$start, 5)."n"; $start = microtime(true); $db = mysqli_connect('127.0.0.1', 'root', ''); foreach (mysqli_query($db, 'select * from '.$table, MYSQLI_USE_RESULT) as $row) $test = $row; echo $size.' mysqli-unbuffered '.number_format(microtime(true)-$start, 5)."n"; $start = microtime(true); $db = new PDO('mysql:host=127.0.0.1', 'root', ''); foreach ($db->query('select * from '.$table) as $vals) $test = $vals; echo $size.' pdo-buffered '.number_format(microtime(true)-$start, 5)."n"; $start = microtime(true); $db = new PDO('mysql:host=127.0.0.1', 'root', '', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false)); foreach ($db->query('select * from '.$table) as $vals) $test = $vals; echo $size.' pdo-unbuffered '.number_format(microtime(true)-$start, 5)."n"; }
Pengujian dilakukan dengan PHP 5.3.10, MySQL 5.5.29, Kernel 3.2.0, 64bit, 3.4GHz (QEMU), Skor nilai dalam hitungan detik.
100 mysql-buffered 0.00011 100 mysql-unbuffered 0.00015 100 mysqli-buffered 0.00041 100 mysqli-unbuffered 0.00032 100 pdo-buffered 0.00043 100 pdo-unbuffered 0.00041 500 mysql-buffered 0.00034 500 mysql-unbuffered 0.00045 500 mysqli-buffered 0.00033 500 mysqli-unbuffered 0.00024 500 pdo-buffered 0.00058 500 pdo-unbuffered 0.00058 1000 mysql-buffered 0.00059 1000 mysql-unbuffered 0.00064 1000 mysqli-buffered 0.00037 1000 mysqli-unbuffered 0.00030 1000 pdo-buffered 0.00090 1000 pdo-unbuffered 0.00096 5000 mysql-buffered 0.00288 5000 mysql-unbuffered 0.00290 5000 mysqli-buffered 0.00077 5000 mysqli-unbuffered 0.00054 5000 pdo-buffered 0.00340 5000 pdo-unbuffered 0.00341 10000 mysql-buffered 0.00564 10000 mysql-unbuffered 0.00580 10000 mysqli-buffered 0.00123 10000 mysqli-unbuffered 0.00079 10000 pdo-buffered 0.00665 10000 pdo-unbuffered 0.00656 50000 mysql-buffered 0.04469 50000 mysql-unbuffered 0.04609 50000 mysqli-buffered 0.01915 50000 mysqli-unbuffered 0.01735 50000 pdo-buffered 0.04679 50000 pdo-unbuffered 0.04587 100000 mysql-buffered 0.08471 100000 mysql-unbuffered 0.09054 100000 mysqli-buffered 0.03967 100000 mysqli-unbuffered 0.03343 100000 pdo-buffered 0.09257 100000 pdo-unbuffered 0.09148
Selanjutnya kedepannya bisa diujicoba menggunakan JOIN antar table, baik menggunakan LEFT JOIN, RIGHT JOIN maupun INNER JOIN.
Siap-siap ganti skrip ke mysqli_ karena bentar lagi mysql_ tidak dikembangkan lagi oleh PHP.