zoukankan      html  css  js  c++  java
  • 百万级数据实现PDO入库

    <?php
    //获取随机英文字符串
    function getNickname($length){
        $strs="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
        $name=substr(str_shuffle($strs),mt_rand(0,strlen($strs)-11),$length);
        return $name;
    }
    //设置超时时间
    set_time_limit(3600);
    ini_set('memory_limit', '1024M');
    //链接数据库
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=1703a','root','root');
    
    //sql前半部分
    $sql = 'insert into user (username,nickname,fname,create_at) values ';
    
    //循环拼接
    for($i=1;$i<=100000;$i++){
        $nickname = getNickname(6);
        $fname = getNickname(10);
        $sql .= "('".$i."email@qq.com','".$nickname."','".$fname."','".time()."'),";
    }
    //去掉多余的逗号
    $last_sql = substr($sql, 0, -1);
    // echo $last_sql;
    //最终的sql
    $pdo->exec($last_sql);
    -------------------------------
     
    运行上述代码需要注意的操作除了代码标红的地方还需要注意以下
    入库10W条数据报错如下:
    原因是:mysql中的max_allowed_packet 设置过小导致记录写入失败
    解决方案是:
    1、查看当前最大支持多少M
    show VARIABLES like '%max_allowed_packet%';
    表示支持1M,所以需要进行修改
     
    2、修改:set global max_allowed_packet = 20*1024*1024 这里改的是20M
     
    那么入库100W条数据应该怎么处理呢?
     
    只需设置set global max_allowed_packet = 100*1024*1024即可
    设置完要关闭Navicat重新进入执行才能看到效果
     
     
    ----------------------------------------
     
    慢查询开启状态 show VARIABLES LIKE 'slow_query_log%';
    设置开启慢查询 SET GLOBAL slow_query_log = 'ON';
    设置慢查询超过1秒钟记录 SET GLOBAL long_query_time=1
    设置完要关闭Navicat重新进入执行才能看到效果
     
    ----------------------------------------
    对于百万级数据表的优化考虑建索引,如果查询时间还是有点长,那么考虑把存储引擎改成InnoDb
  • 相关阅读:
    Git回退---reset和revert
    XML解析
    SpringBoot学习day01
    Spring boot精要
    JS没有contains方法,可以用indexof实现
    git fetch 取回所有分支(branch)的更新(转)
    idea 设置注释模板
    git退出编辑模式
    git 提交代码到远程分支
    linux下,保存退出vim编辑器(转)
  • 原文地址:https://www.cnblogs.com/fenchang/p/11067801.html
Copyright © 2011-2022 走看看