* Author:RDP
* My mail:[email protected]
* My blog: blog.teamhaka.com
*/
A 測試說明:
主要比較所花時間,包括sql執行時間和最低限度php程序執行時間,不包括數據庫鏈接和關閉數據庫的時間。
表結構中有9列。
測試以分別插入10、20、50、100、200、500、1000、2000行數據來進行。
B 測試環境:
1 php和mysql同在一臺Vista主機上
2 mysql版本5.1.41
3 php版本5.3.1
C 測試結論:
一次性插入快於循環插入。
結果數據如下(單位秒):
各行三部分的數據含義爲 結束時間、起始時間、結束時間與起始時間差值
Insert Rows:10
Once insert: 1309098893.9652 1309098893.964 0.0011539459228516
Loop insert: 1309098893.9772 1309098893.9726 0.0045840740203857
Insert Rows:20
Once insert: 1309098893.9815 1309098893.9803 0.0012009143829346
Loop insert: 1309098893.9892 1309098893.9841 0.0051271915435791
Insert Rows:50
Once insert: 1309098893.9938 1309098893.9929 0.00085210800170898
Loop insert: 1309098894.0051 1309098893.9964 0.0087730884552002
Insert Rows:100
Once insert: 1309098894.0096 1309098894.0083 0.0012550354003906
Loop insert: 1309098894.0307 1309098894.0128 0.017880916595459
Insert Rows:200
Once insert: 1309098894.0356 1309098894.0335 0.0021400451660156
Loop insert: 1309098894.072 1309098894.0385 0.033463954925537
Insert Rows:500
Once insert: 1309098894.0814 1309098894.0757 0.00565505027771
Loop insert: 1309098894.1801 1309098894.0846 0.095527172088623
Insert Rows:1000
Once insert: 1309098894.1934 1309098894.1838 0.0095570087432861
Loop insert: 1309098894.3763 1309098894.1962 0.18014216423035
Insert Rows:2000
Once insert: 1309098894.4275 1309098894.3793 0.048200130462646
Loop insert: 1309098894.8203 1309098894.4318 0.38853096961975
1 表結構
CREATE TABLE IF NOT EXISTS `insertTest` (
`id` int(10) ,
`data1` varchar(20) NOT NULL DEFAULT '',
`data2` varchar(20) NOT NULL DEFAULT '',
`data3` varchar(20) NOT NULL DEFAULT '',
`data4` varchar(20) NOT NULL DEFAULT '',
`data5` varchar(20) NOT NULL DEFAULT '',
`data6` varchar(20) NOT NULL DEFAULT '',
`data7` varchar(20) NOT NULL DEFAULT '',
`data8` varchar(20) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2 測試代碼
$dbConfig["hostName"] = "localhost";
$dbConfig["userName"] = "root";
$dbConfig["userPw"] = "";
$dbConfig['dbName'] = 'test';
$dbConfig['tbName'] = 'insertTest';
function insertTest($dbConfig,$rows=1){
//input check
if($rows<1){
return false;
}
/***** 一次性插入 TEST *****/
//db connect
$dbHander = @mysql_connect($dbConfig['hostName'], $dbConfig['userName'], $dbConfig['userPw']);
if(!dbHander){
die("Db connect: Faile");
}
if(!@mysql_select_db($dbConfig['dbName'],$dbHander)) {
die('Db select: Faile');
}
//start
$resultOnce['startTime'] = microtimeFloat();
$sqlOnce = " INSERT INTO $dbConfig[tbName] (id,data1,data2,data3,data4,data5,data6,data7,data8) values ";
$onceRows = $rows;
while($onceRows>0){
$sqlOnce .= " ( '$onceRows','data1','data2','data3','data4','data5','data6','data7','data8' ),";
$onceRows--;
}
$sqlOnce = substr( $sqlOnce,0,-1);
//$resultOnce['sqlExecStart'] = microtimeFloat();
$query = mysql_query($sqlOnce,$dbHander);
//$resultOnce['sqlExecEnd'] = microtimeFloat();
//end
$resultOnce['endTime'] = microtimeFloat();
if(!$query){
die('Query Error: '.$sqlOnce);
}
// db close
@mysql_close($dbHander);
/***** 一次性插入 TEST *****/
/***** 循環插入 TEST *****/
//db connect
$dbHander = @mysql_connect($dbConfig['hostName'], $dbConfig['userName'], $dbConfig['userPw']);
if(!dbHander){
die("Db connect: Faile");
}
if(!@mysql_select_db($dbConfig['dbName'],$dbHander)) {
die('Db select: Faile');
}
//start
$resultLoop['startTime'] = microtimeFloat();
$loopRows = $rows;
while($loopRows>0){
$query = mysql_query(" INSERT INTO $dbConfig[tbName](id,data1,data2,data3,data4,data5,data6,data7,data8) values( '$loopRows','data1','data2','data3','data4','data5','data6','data7','data8' ) ",$dbHander);
if(!$query){
die('Loop Query Error');
}
$loopRows--;
}
//end
$resultLoop['endTime'] = microtimeFloat();
// db close
@mysql_close($dbHander);
/***** 循環插入 TEST *****/
echo 'Insert Rows:'.$rows;
echo 'Once insert: '.$resultOnce['endTime'].' '.$resultOnce['startTime'].' '.($resultOnce['endTime']-$resultOnce['startTime']);
echo 'Loop insert: '.$resultLoop['endTime'].' '.$resultLoop['startTime'].' '.($resultLoop['endTime']-$resultLoop['startTime']).'
';
}
function microtimeFloat() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
insertTest($dbConfig,10);
insertTest($dbConfig,20);
insertTest($dbConfig,50);
insertTest($dbConfig,100);
insertTest($dbConfig,200);
insertTest($dbConfig,500);
insertTest($dbConfig,1000);
insertTest($dbConfig,2000);