加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

百万级数据实现PDO入库

发布时间:2020-12-13 17:33:06 所属栏目:PHP教程 来源:网络整理
导读:? php // 获取随机英文字符串 function getNickname( $length ){ $strs ="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm" ; $name = substr ( str_shuffle ( $strs ), mt_rand (0, strlen ( $strs )-11), $length ); return $name ;} // 设置超时时
<?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?protected]‘,‘".$nickname."‘,‘".$fname."‘,‘".time()."‘),";
}
//去掉多余的逗号
$last_sql = substr($sql,-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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读