专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » mysqlimysql:MySQL vs MySQLi 執行效能比較(一) »正文

mysqlimysql:MySQL vs MySQLi 執行效能比較(一)

来源: 发布时间:星期一, 2009年1月12日 浏览:23次 评论:0
  傳統php connect mysql 方式必須先建立條連線後再進行select db動作在新版php中已經可以在建立連線function裡加上db name不用撰寫兩行程式碼才能建立完成db連線

  除了更改db連線方式的外mysqlquery方式也有新function加入mysql執行方式不再是個query行指令也就是說如果你要執行多筆insert或update時sql指令可以不用放在迴圈裡面跑了

  不過效能是很重要到底這樣改變除了方便程式撰寫的外對效能有無提升呢?我做了以下測試:

<?
/*
CREATE TABLE `Loadingtest` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`LT1` VARCHAR( 12 ) NOT NULL ,
`LT2` VARCHAR( 12 ) NOT NULL ,
`LT3` VARCHAR( 12 ) NOT NULL ,
`LT4` VARCHAR( 12 ) NOT NULL
) ENGINE = MYISAM ;
*/
function caclutime{
$time = explode( " ", microtime);
$usec = (double)$time[0];
$sec = (double)$time[1];
$sec + $usec;
}
/*/-------傳統跑迴圈Insert---
$begin_time=caclutime;
$link = mysql_connect("host", "username", "password");
mysql_select_db("test",$link);
for($i=0;$i<100000;$i){
$LT1=rand(0,10000);
$LT2=rand(0,10000);
$LT3=rand(0,10000);
$LT4=rand(0,10000);
$sql="INSERT INTO Loadingtest SET LT1='".$LT1."',LT2='".$LT2."',LT3='".$LT3."',LT4='".$LT4."'";
mysql_query($sql,$link);
}
$end_time=caclutime;
$total=$end_time-$begin_time;
//13.464846134186
echo $total."n";
//------------------------------/*/
  
/*/-------mysqli Insert---
$begin_time=caclutime;
$link = mysqli_connect("host", "username", "password","test");
for($i=0;$i<100000;$i){
$LT1=rand(0,10000);
$LT2=rand(0,10000);
$LT3=rand(0,10000);
$LT4=rand(0,10000);
$sql="INSERT INTO Loadingtest SET LT1='".$LT1."',LT2='".$LT2."',LT3='".$LT3."',LT4='".$LT4."'";
mysqli_query($link,$sql);
}
  
$end_time=caclutime;
$total=$end_time-$begin_time;
//13.800211191177
echo $total."n";
//------------------------------/*/
  
/*/-------mysqli statements Insert---
$begin_time=caclutime;
$link = mysqli_connect("host", "username", "password","test");
$stmt = mysqli_prepare($link,"INSERT INTO Loadingtest SET LT1=?,LT2=?,LT3=?,LT4=?");
for($i=0;$i<100000;$i){
$LT1=rand(0,10000);
$LT2=rand(0,10000);
$LT3=rand(0,10000);
$LT4=rand(0,10000);
mysqli_stmt_bind_param($stmt, "iiii", $LT1, $LT2, $LT3, $LT4);
mysqli_stmt_execute($stmt);
}
$end_time=caclutime;
$total=$end_time-$begin_time;
//11.837828874588
echo $total."n";
//------------------------------/*/
  
/*/-------mysqli multi_query Insert---
$begin_time=caclutime;
$link = mysqli_connect("host", "username", "password","test");
for($i=0;$i<100000;$i){
$LT1=rand(0,10000);
$LT2=rand(0,10000);
$LT3=rand(0,10000);
$LT4=rand(0,10000);
$sql.="INSERT INTO Loadingtest SET LT1='".$LT1."',LT2='".$LT2."',LT3='".$LT3."',LT4='".$LT4."';";
}
mysqli_multi_query($link,$sql);
$end_time=caclutime;
$total=$end_time-$begin_time;
//1.9740197658539
echo $total."n";
//------------------------------/*/
?>


  測試結果告訴我們多筆sql語法執行方式以multi_query最佳但multi_query會不會讓程式碼產生SQL Injection漏洞這必需要再經過完整測試

  當然還有loaddata infile方式不過我沒有將這次測試加入loaddata infile這留給其他朋友去測試

  ps.要知道您php有沒有支援mysqli到phpinfo;裡看下就知道了

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: