PHP5.1.0RC1でPDOとADODB、PEAR::DBのベンチマーク(PostgreSQL&MySQL)

PHP5.1辺りでどうやら5系に乗り換えても良さそうな雰囲気が漂っていますが、データベースに接続する機構のPDO(PHP Data Object)を試しつつADODBPEAR::DB、ネイティブの関数とどの程度速度に差が出るのか簡単に試してみました。

結果的に当然のことながらネイティブの方がかなり速く、PDOも(PostgreSQLの結果を見る限り)良さそう。

対象となるSQLは10行の適当なデータを入れたDBからのSELECT。なるべく同じ条件下でベンチマークを取ったつもりですが、ADODBが意外と遅かったので正しいのか……?
MySQLは5.0.15でも試しましたが4.1系とほぼ同じ結果。MySQLのPDOがなぜか、「SQLSTATE[HY000] [2002] Can’t connect to local MySQL server through socket ” (111)」というエラーが出て動かず。いろいろ試したのですが原因不明。

環境:
WhiteBoxLinux4、apache2.0.54、PHP5.1.0.RC1

PHPのコンパイルオプション:

./configure --with-zlib --with-pgsql --with-xmlrpc \
 --without-cgi --with-pdo-pgsql \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/src/mysql-4.1.15 --with-pdo-mysql
native functionPDOADODBPEAR::DB
PostgreSQL8.0.30.00070.0040.030.014
MySQL4.1.150.0008?0.0240.011

pgsql_native.php:

<?php
require_once("Benchmark/Timer.php");
$timer = new Benchmark_Timer(TRUE);
$conn = pg_pconnect("dbname=funaki user=funaki");
if (!$conn) {
    die("cannot connect.");
}
$result = pg_query($conn, "select * from blog");
print_r(pg_fetch_all($result));
?>

pgsql_pdo.php:

<?php
require_once("Benchmark/Timer.php");
$timer = new Benchmark_Timer(TRUE);
try {
    $dbh = new PDO('pgsql:host=localhost;dbname=funaki', "funaki", "");
    $sth = $dbh->prepare("select * from blog");
    $sth->setFetchMode(PDO_FETCH_ASSOC);
    $sth->execute();
    print_r($sth->fetchAll());
} catch (PDOException $e) {
    die($e->getMessage());
}
?>

pgsql_adodb.php:

<?php
require_once("Benchmark/Timer.php");
$timer = new Benchmark_Timer(TRUE);
dl('adodb.so');
require_once('adodb/adodb.inc.php');
$db = ADONewConnection('postgres');
$db->Connect("localhost", "funaki", "", "funaki");
$db->setFetchMode(ADODB_FETCH_ASSOC);
$rs =& $db->Execute('select * from blog');
print_r(adodb_getall($rs));
?>

pgsql_pear.php:

<?php
require_once("Benchmark/Timer.php");
$timer = new Benchmark_Timer(TRUE);
require_once("DB.php");
$db = DB::connect("pgsql://funaki@unix(/tmp)/funaki");
if (PEAR::isError($db)) {
    die($db->getMessage());
}
$sql = "select * from blog";
$db->setFetchMode(DB_FETCHMODE_ASSOC);
print_r($db->getAll($sql));
?>
This entry was posted in いじる. Bookmark the permalink. Both comments and trackbacks are currently closed.

One Comment

  1. mysqli
    Posted 2007/09/18 at 8:58 pm | Permalink

    mysqliでも試してもらえると嬉しいです

Page optimized by WP Minify WordPress Plugin