PHP批量添加數據


<?php
// 連接數據庫
header('content-type:text/html;charset=utf-8');
define('DB_HOST','127.0.0.1');
define('DB_USER','root');
define('DB_PASS','root');
define('DB_NAME','test');
define('DB_PORT',3306);
define('DB_CHAR','utf8');
define('APPNAME','');
$sqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);
$sqli->query( "SET NAMES ".DB_CHAR );
ini_set("max_execution_time", "30");

/**
 * 批量添加 方法1
 * 使用insert into循環遍歷添加
 */

for ( $i = 0; $i<2000000; $i++){
    $sql = "INSERT INTO test_md5(`data`,`mda5_data`) VALUE (".$i.",'".md5($i)."')";
    $sqli->query( $sql );
}

/**
 * 批量添加 方法2
 * 使用事務提交,批量插入數據庫(每隔10W條提交下)
 */

$sqli->query( 'start transaction' );
for( $i=0;$i<=2000000;$i++ ){
    $sql = "INSERT INTO test_md5(`data`,`md5_data`) VALUE (".$i.",'".md5($i)."')";
    // echo $i.'=>'.$sql.'<br/>';
    $sqli->query( $sql );
    if($i%10000==0){
        $sqli->query('commit transaction');
        $sqli->query('begin');
    }
}
$sqli->query('commit transaction');

/** * 批量添加 方法3 * 使用優化SQL語句,將SQL語句拼接使用 insert into table() values(),(),()然后一次性添加; */
ini_set("max_execution_time", "200000"); echo $time_s = date("H:i:s",time())."<br/>"; $sql = "INSERT INTO test_md5(`data`,`md5_data`) VALUES "; for ( $i = 1 ; $i<2000000; $i++ ){ $data_md5 = md5($i); $sql .= "( ".$i.",'".$data_md5."'),"; } $sql = substr( $sql,0, strlen($sql)-1 ); // echo $sql;die(); $sqli->query( $sql ); echo $time_e = date("H:i:s",time())."<br/>"; // 15:45:38 // 15:46:09 // 不到一分鍾執行完畢

 

 

 注意

 1:PHP的代碼執行時間

 max_execution_time = 200000

 2:PHP每一次執行請求的內存空間

 memory_limit = 1G

 3:mysql接收的最大數據包

 max_allowed_packet = 1G

 

 最后總結下,在插入大批量數據時,

 第一種方法無疑是最差勁的,

 第二種方法在實際應用中就比較廣泛,

 第三種方法在插入測試數據或者其他低要求時比較合適,速度確實快。

 

原文鏈接 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM