首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用php5.3加速MS SQL SERVER中的插入操作?

问如何用php5.3加速MS SQL SERVER中的插入操作?
EN

Stack Overflow用户
提问于 2013-12-08 17:26:05
回答 1查看 185关注 0票数 0

我使用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中:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
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;
}   

提前谢谢你

EN

回答 1

Stack Overflow用户

发布于 2014-01-04 16:38:17

好了,我自己找到了解决方案。

代码语言:javascript
复制
    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,以加快速度

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20451809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档