我使用apache2.2,php5.4,与php_sqlsrv_53_nts_vc6.dll,来做大型插入与MS SQL SERVER。
我被非常慢的insert操作所困扰:插入100行,耗时28秒!即使我使用
sqlsrv_begin_transaction( $conn ) sqlsrv_commit( $conn )
它仍然需要7到11秒。
然后我用MS SQL SERVER尝试了Navicat,使用BEGIN TRANSACTION;COMMIT;我可以在6秒内插入8000行。
所以,我猜这不是MS SQL服务器的问题,而是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;
} 提前谢谢你
发布于 2014-01-04 16:38:17
好了,我自己找到了解决方案。
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,split by ";“一次发送所有sql,以加快速度
https://stackoverflow.com/questions/20451809
复制相似问题