zoukankan      html  css  js  c++  java
  • 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

     最后总结下,在插入大批量数据时,

     第一种方法无疑是最差劲的,

     第二种方法在实际应用中就比较广泛,

     第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。

    原文链接 

  • 相关阅读:
    Linux数据库还原备份
    loadrunner遇到的问题
    Maven基础入门与核心知识
    数据去中心化的场景与流程
    设计模式:灵活编程(观察者模式)
    使用Mycat构建MySQL读写分离、主从复制、主从高可用
    设计模式:灵活编程(装饰模式)
    设计模式:灵活编程(组合模式)
    Laravel5:重定向 redirect 函数的详细使用
    设计模式:对象生成(单例、工厂、抽象工厂)
  • 原文地址:https://www.cnblogs.com/laowenBlog/p/6735695.html
Copyright © 2011-2022 走看看