zoukankan      html  css  js  c++  java
  • 百万数据入库

    <?php
    $sql="insert into users(username,kinfname,fationname,usertioe) values ";
       //php7.2手册 封装方法 获取随机数(方法里搜索rand)
        function generateRandStr($length){
            $randstr = "";
            for($i=0; $i<$length; $i++){
                $randnum = mt_rand(0,61);
                if($randnum < 10){
                    $randstr .= chr($randnum+48);
                }else if($randnum < 36){
                    $randstr .= chr($randnum+55);
                }else{
                    $randstr .= chr($randnum+61);
                }
            }
            return $randstr;
        }
    //设置超时时间
    set_time_limit(3600);
    ini_set('memory_limit', '1024M');
    //上半截sql语句
    $sql="insert into users(username,kinfname,fationname,usertime) values ";
    for ($i=0;$i<1000000;$i++){
        $rand=generateRandStr(6);
        $name=generateRandStr(10);
        $time=time();
        //循环后半截sql语句 拼接
        $sql.="('".$i."email@qq.com','".$rand."','".$name."','".$time."'),";
    }
    //去掉最后的逗号
    $sql=substr($sql,0,-1);
    //连接数据库
    $link="mysql:host=127.0.0.1;dbname=1703plus";
    $pdo= new PDO($link,'root','root');
    //执行语句
    $pdo->exec($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
  • 相关阅读:
    lamp一键安装
    mysql忘记密码
    lamp搭建
    进程与线程的一个简单解释
    使用jmeter进行api接口压力测试(转自某位大佬,感谢)
    cookie,session的区别
    Pycharm2019最新激活注册码(亲测有效)
    安装jmeter
    php环境搭建(需编译安装)
    (转载某位大神的,谢谢啦)listener.ora、tnsnames.ora和sqlnet.ora这3个文件的关系和作用
  • 原文地址:https://www.cnblogs.com/npb1026/p/11067800.html
Copyright © 2011-2022 走看看