我使用apache2.2、php 5.4和php_sqlsrv_53_nts_vc6.dll,用MS SQL SERVER进行大型插入。
插入操作的速度非常低,这让我很头疼:插入100行,花费28秒!即使我使用
sqlsrv_begin_transaction($conn)sqlsrv_commit($conn)
它仍然需要7到11秒。
然后我尝试了使用MS SQL SERVER的Navicat,使用开始交易;承诺;我可以在6秒内插入8000行。
所以,我想这不是MS SQL SERVER的问题,而是PHP和PHP_sqlsrv_53_nts_vc6.dll的问题。
有人能告诉我如何用MS SQL加快php中的插入操作吗?或者给我看一些代码?
这是我的代码:
在tools.php中:
public static $dbtype = FALSE;
public static function query($sql,$conn){
if(self::$dbtype==FALSE){
self::$dbtype = tools::getConfigItem("DB_TYPE");
}
$res = FALSE;
if(self::$dbtype=="mysql"){
$res = mysql_query($sql,$conn);
}
if(self::$dbtype=="mssql"){
$sql = iconv('UTF-8','GBK',$sql);
$res = sqlsrv_query($conn,$sql);
}
return $res;
}
public static function transaction($conn){
if(self::$dbtype=="mysql"){
mysql_query('START TRANSACTION;',$conn);
}
if(self::$dbtype=="mssql"){
if ( sqlsrv_begin_transaction( $conn ) === false ) {
die( print_r( sqlsrv_errors(), true ));
}
}
}
public static function commit($conn){
if(self::$dbtype=="mysql"){
mysql_query('COMMIT;',$conn);
}
if(self::$dbtype=="mssql"){
sqlsrv_commit( $conn );
}
}
install.php中:
public static function step4_2(){
$t_return = array("status"=>"2","msg"=>"");
$sqls = json_decode2($_REQUEST['sqls'],TRUE);
if(count($sqls)==0){
return array(
'status'=>'2'
,'msg'=>'wrong request:'.$_REQUEST['sqls']
);
}
$conn = tools::getConn();
tools::transaction($conn);
for($i=0;$i<count($sqls);$i++){
$sqls[$i] = strtolower($sqls[$i]);
$res = tools::query($sqls[$i],$conn);
}
tools::commit($conn);
$t_return = array("status"=>"1","msg"=>count($sqls)." sql executed ");
return $t_return;
}
提前感谢
好吧,我自己找到了解决方案。
tools::transaction($conn);
if(tools::$dbtype=="mssql"){
$str = implode(";",$sqls);
tools::query($str,$conn);
}
else{
for($i=0;$i<count($sqls);$i++){
tools::query($sqls[$i], $conn);
}
}
tools::commit($conn);
发送所有sql,按";"拆分一次性发送所有sql,以加快