本测试文档,采用GPL 协议,如转载请注明出处 : http://blog.bowenye.com/read.php?4  
如商业,请联系本人  QQ : 84437129接上一节
http://topic.csdn.net/u/20090508/16/cb726d59-892d-4872-b0c7-226c8b2a0433.html各位同学,大家好,上一节介绍 MySQL与PostgreSQL 对比的前期内容和一堆费话资料,这节将正式开始进入第一个阶段测试比较
上一节所需的条件已完备,现在先公布PHP的测试代码MySQL 测试代码
 
<?PHP
//MySQL 测试代码
//OK,开始写测试代码,下面是PHP手册中标准的运用
// MyISAM 的表为:uchome_docomment 
// InnoDB的表为: uchome_docomment_innodb ,
//这儿只贴出MYISAM的PHP代码header("Content-type: text/html; charset=utf-8"); 
//insert 用的 本来想随机来插入内容的,有点懒啦$in_sql = "INSERT INTO uchome_docomment (upid ,doid ,uid ,username ,dateline ,message ,ip ,grade)VALUES (
 '1', '2', '1', 'myname', '1234567890', 'messagemessagemessagemessagemessa
gemessagemessagemessagemessagem
essagemessagemessagemessagemessage', '127.0.0.1', '2'
)";
//insert 次数
$i_i=0;
//select 用, 全select 出来吧 :)  ,取一条,留作 delete 或 update用
$se_sql ="select * from uchome_docomment LIMIT 1";
//select 次数
$i_s=0;
//delete 用 , 
//随机 del id
$idd=1;
$del_sql ="DELETE FROM uchome_docomment WHERE id = ".$idd." ";
//delete 次数
$i_d=0;
//update 用
//update 随机 id
$idu=1;
$up_sql = "UPDATE uchome_docomment SET doid = '4' WHERE id =".$idu."   ";
//update 次数
$i_u=0;//先连接数据
$link = mysql_connect('localhost', 'bowen', 'bowen') or die('Could not connect: ' . mysql_error());
echo 'Connected successfully';
mysql_select_db('bowen',$link) or die('Could not select database'. mysql_error());//开始计时
$start_time = microtime_float();
// 在一万次FOR中,随机进行SQL操作
for($i=0;$i<10;$i++) {
  $a=rand(1,4);
  switch ($a) {
    case $a==1:
      $i_s++;
      //select 
        $result = mysql_query($se_sql) or die('Query failed: ' . mysql_error());
        while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
            rand(0,1)?$idd=$line['id']:$idu=$line['id'];
        }
        // 释放结果集
        mysql_free_result($result);
      break;
    case $a==2:
      $i_i++;
      //insert
      $result = mysql_query($in_sql) or die('Query insert failed: ' . pg_last_error());  
      break;
    case $a==3:
      $i_d++;
      //delete
      $result = mysql_query($del_sql) or die('Query delete failed: ' . pg_last_error());  
      break;
    case $a==4:
      $i_u++;
      //update
      $result = mysql_query($up_sql) or die('Query update failed: ' . pg_last_error());
      break;
    default:
      echo "here is default";
      break;
  }
}
    //结束
$end_time = microtime_float();// 关闭连接
mysql_close($link);echo "<br />用了 : ".($end_time-$start_time)." 时间";
echo "<br /> select 次数".$i_s;
echo "<br /> insert 次数".$i_i;
echo "<br /> delete 次数".$i_d;
echo "<br /> update 次数".$i_u;
// 释放结果集//标准的PHP手册 例子
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
?>
PostgreSQL 测试代码
 
<?PHP
//PostgreSQL 测试代码
//OK,开始写测试代码,下面是PHP手册中标准的运用header("Content-type: text/html; charset=utf-8"); 
//insert 用的 本来想随机来插入内容的,有点懒啦$in_sql = "INSERT INTO uchome_docomment (upid ,doid ,uid ,username ,dateline ,message ,ip ,grade)VALUES (
 '1', '2', '1', 'myname', '1234567890', 'messagemessagemessagemessage
messagemessagemessagemessagem
essagemessagemessagemessagemessagemessage', '127.0.0.1', '2'
)";
//insert 次数
$i_i=0;
//select 用, 全select 出来吧 :)  ,取一条,留作 delete 或 update用
$se_sql ="select * from uchome_docomment LIMIT 1";
//select 次数
$i_s=0;
//delete 用 , 
//随机 del id
$idd=1;
$del_sql ="DELETE FROM uchome_docomment WHERE id = ".$idd." ";
//delete 次数
$i_d=0;
//update 用
//update 随机 id
$idu=1;
$up_sql = "UPDATE uchome_docomment SET doid = '4' WHERE id =".$idu."   ";
//update 次数
$i_u=0;//先连接数据
$dbconn = pg_connect("host=localhost dbname=bowen user=bowen password=bowen") or die('Could not connect: ' . pg_last_error()); //开始计时
$start_time = microtime_float();
// 在一万次FOR中,随机进行SQL操作
for($i=0;$i<10;$i++) {
  $a=rand(1,4);
  switch ($a) {
    case $a==1:
      $i_s++;
      //select 
        $result = pg_query($se_sql) or die('Query select failed: ' . pg_last_error());  
        while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
            rand(0,1)?$idd=$line['id']:$idu=$line['id'];
        }
        pg_free_result($result);
      break;
    case $a==2:
      $i_i++;
      //insert
      $result = pg_query($in_sql) or die('Query insert failed: ' . pg_last_error());  
      break;
    case $a==3:
      $i_d++;
      //delete
      $result = pg_query($del_sql) or die('Query delete failed: ' . pg_last_error());  
      break;
    case $a==4:
      $i_u++;
      //update
      $result = pg_query($up_sql) or die('Query update failed: ' . pg_last_error());
      break;
    default:
      echo "here is default";
      break;
  }
}
    
//结束
$end_time = microtime_float();
// 关闭连接
pg_close($dbconn);
echo "<br />用了 : ".($end_time-$start_time)." 时间";
echo "<br /> select 次数".$i_s;
echo "<br /> insert 次数".$i_i;
echo "<br /> delete 次数".$i_d;
echo "<br /> update 次数".$i_u;
// 释放结果集//标准的PHP手册 例子
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
?>
测试即将开始了,现在先说明规则 
测试规则
一.五次,相隔20秒左右访问一次PHP文件
二.打开10个页面,同时连接PHP文件
三.顺序MYISAM -> InnoDB -> PostgreSQL
let's go
经过一段时间之后,成绩出来了,先看图
Y座标是时间
X座标是测试次数
哈哈,不要惊讶,本人可以证明,配置都是默认,本人绝不对配置进行过改动
但为什么出现的性能与网上大多数的观点不一至呢?看到这儿,可能有一大堆MySQL 的fans们
已经拿好鸡蛋等着我了,哈哈,再看看一下面一份测试结果的txt文件
看看时间,竟然一节课又过了,老话:欲知后事如何,请看第三节