Mysql 10万级别数据插入
Posted 小林同学的笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 10万级别数据插入相关的知识,希望对你有一定的参考价值。
需求
准备工作
$servername = "localhost";
$port = 3306;
$username = "root";
$password = "";
$dbname = "test";
// 创建连接
$conn = new \mysqli($servername, $username, $password, $dbname, $port);
// 检测连接
if ($conn->connect_error) {
die("connect failed: " . $conn->connect_error);
}
//用range函数 生成10个数据
foreach (range(1,100000) as $k=>$v){
$arr[$k]['age']=$v;
$arr[$k]['name']='testname'.$v;
}
单条插入
//开始时间
$costBegin = microtime(true);
if (!empty($arr)) {
foreach($arr as $v) {
$sql = "INSERT INTO user_info (name, age) VALUES (\"{$v['name']}\",{$v['age']})";
if ($conn->query($sql) === TRUE) {
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
//结束时间
$costEnd = microtime(true);
$cost = round($costEnd - $costBegin, 3);
echo "用时{$cost}秒";
$conn->close();
采用单条插入方式,数据插入不到两万条,数据库扛不住压力,报502 响应超时。
拼接sql插入
//开始时间
$costBegin = microtime(true);
if (!empty($arr)) {
$sql = sprintf("INSERT INTO user_info (name, age) VALUES ");
foreach($arr as $v) {
$sql .= "(\"{$v['name']}\",{$v['age']}),";
}
// 去除最后一个逗号,并且加上结束分号
$sql = rtrim($sql, ',').';';
if ($conn->query($sql) === TRUE) {
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
//结束时间
$costEnd = microtime(true);
$cost = round($costEnd - $costBegin, 3);
echo "用时{$cost}秒";
$conn->close();
拼接插入方式10万条数据,经过多次测试用时平均0.8秒。
以上是关于Mysql 10万级别数据插入的主要内容,如果未能解决你的问题,请参考以下文章