本测试文档,采用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文件
看看时间,竟然一节课又过了,老话:欲知后事如何,请看第三节
解决方案 »
- mysql在cmd中可以显示中文了,但在vc里查询数据中文还是乱码
- mysql远程访问oracle问题
- mysql数据库 enum类型问题
- 像这样的sql如何优化
- 请问MYSQL有没有不输出query结果只输出query执行时间的方法?
- 这样的表怎样建呢.请各位指教...急~~.多谢
- MYSQL 中如何删除重复记录?
- mysql中的数据库表win下面有什么可视化工具查看修改吗?(没装mysql服务器的情况下)
- #紧急#求助mysql 登陆不了
- 在线等,sql语句,字段为年月日时分秒,在写where时只判断年月日
- 关于一个access转mysql语句的问题
- 在存储过程中记录把错误信息记录到自定义表中
看看重发能不能发图上来
再次说明一下:
Y座标是时间
X座标是测试次数