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
[php]$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";
}[/php]
Pengujian dilakukan dengan PHP 5.3.10, MySQL 5.5.29, Kernel 3.2.0, 64bit, 3.4GHz (QEMU), Skor nilai dalam hitungan detik.
[php]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 [/php]
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.