• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
车车大人
博客园    首页    新随笔    联系   管理     

百万级数据实现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
通往牛逼的路上,在意的只有远方!
posted @ 2019-06-22 09:24  车车大人  阅读(493)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3