### 用 PHP 连 mysql 和 oracle 数据库性能比较

测试硬件说明：
测试使用的是我的爱机，配置如下：
CPU：C433
内存：128M
硬盘：酷鱼2代 20G
测试软件说明：
WIN32 下用的是 windows nt server4,sp5,apache 1.3.12,php3.0.15 和 php4rc1,mysql 3.22.29,oracle 8.0.5
linux 下用的是 bluepoint linux1.0, apache 1.3.12, php4rc1,mysql 3.22.32
测试代码说明：
使用一个很简单的表，mysql 和 oracle 使用的表结构是一样的，都只有三个字段，结构如下：
mysql 的表结构：
CREATE TABLE board (
board_id smallint(6) NOT NULL auto_increment,
board_name char(16) NOT NULL,
board_manager char(20),
PRIMARY KEY (board_id)
);
oracle 的结构：
CREATE TABLE PHP_ORACLE."BOARD"
("BOARD_ID" FLOAT,
"BOARD_NAME" CHAR(16) NOT NULL,
"BOARD_MANAGER" CHAR(20)) ;
我们只测试了 INSERT 操作花的时间，对于 select，并未作测试。因为 win32 下只有 PHP3 才能连接 oracle 数据库，所以只测试了用 PHP3 连接 oracle 的性能。相信在 PHP4 的正式版本出来后，用 PHP4 连接 oracle 的速度应该有所提升。而在 LINUX 下，因为我没有装 oracle，所以只测试了 mysql 的性能。据说在 LINUX 下，oracle 的性能不错，只是无法测试。并且我们将所有的用于数据库连接和 oracle 用来分析 sql 语句的代码都放在了统计代码之外，所以测试得出的时间只是用于执行 SQL 操作所花费的时间。
用来测试 mysql 的程序：
<?php
$dblink=mysql_connect("localhost","root","shh123");
mysql_select_db("bbs");
$counter=1;
set_time_limit(300);
$query="insert into board (board_name,board_manager) values ('test','test')";
$begin_time=time();
for ($i=1;$i<=10000;$i++){
mysql_db_query("bbs",$query);
$counter++;
}
$end_time=time();
mysql_close($dblink);
echo "test db speed...<br>";
echo "begin time:".$begin_time."<BR>";
echo "<BR>end time:".$end_time."<BR>";
$total=$end_time-$begin_time;
echo "total spent time:".$total;
?>
用来测试 oracle 的程序：
<?php
$handle=OCILogon("php_oracle","php_oracle");
$counter=1;
set_time_limit(300);
$query="insert into board (board_id,board_name,board_manager) values (:board_id,'test','test')";
$state=OCIParse($handle, $query);
OCIBindByName($state, ":board_id", &$i,32);
$begin_time=time();
for ($i=1;$i<=10000;$i++){
ociexecute($state);
}
$end_time=time();
OCIFreeStatement($state);
ocilogoff($handle);
echo "test db speed...<br>";
echo "begin time:".$begin_time."<BR>";
echo "<BR>end time:".$end_time."<BR>";
$total=$end_time-$begin_time;
echo "total spent time:".$total;
?>
测试结果：
环境：win32+apache+php4+mysql
结果：28 秒
环境：win32+apache+php3+mysql
结果：34 秒
环境：win32+apache+php3+oracle8.0.5(oci 函数)
结果：46 秒
环境：linux+apache+php4+mysql
结果：10 秒
结论：
在 WIN32 下，mysql 的性能虽然不是很好，但和 oracle8 比起来，还是要快很多，尤其是我在测试程序中，并没有将数据库连接的语句包括进来，所以这个测试结果只是插入数据所花费的时间，而 oracle 的连接，天，太慢了！在我的机器上，连接一次，至少 1－2 秒钟。而在 LINUX 下，mysql 的性能相对于在 WIN32 下，又有了一个很大的飞跃。由 28 秒骤减到 10 秒。所以，如果你不需要存储过程的支持，并且数据库量不是大的那么惊人的话，还是在 LINUX 下使用 mysql 作为你的数据库吧！这个轻量级的数据库可以给你最佳的性能、可管理性和相当不错的安全性。