phpはmysqlの中に大量にデータの実例の教程を挿入します。
前言
もしこのような表があるとしたら、この表に大量のデータを入れたいです。
方法一、forを使って循環的に挿入する
mysqlに少量のデータを挿入する時、私達は普通forで循環します。
少量のデータの挿入と大量のデータの挿入を比較して、上のforを使って循環的に挿入すると時間がかかります。
条の数
時間(単位:秒)
10
0.011
1000
0.555
10000
5.733
100000
60.587
方法二、insert文を使って差し込みます。
mysqlにはinsert文を使って差し込むことができます。
サンプルコードを見て、データバーの数を見てみます。
条の数
時間(単位:秒)
10
0.006
1000
0.025
10000
0.31
100000
1.23
もちろん、配列が大きすぎると思ったら、sqlエラーのリスクを減らすためにも、array gauを使うことができます。chunkは配列を指定の大きさのブロックに切り、各ブロックをinsert結合して挿入します。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考となる学習価値を持っています。質問があれば、メッセージを書いて交流してください。ありがとうございます。
もしこのような表があるとしたら、この表に大量のデータを入れたいです。
CREATE TABLE IF NOT EXISTS `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT ' ',
`name` varchar(255) NOT NULL default '' COMMENT ' ',
`age` int(11) NOT NULL default '0' COMMENT ' ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' ';
一括挿入方法一、forを使って循環的に挿入する
mysqlに少量のデータを挿入する時、私達は普通forで循環します。
$arr = [
[
'name' => 'testname1',
'age' => 18,
],
[
'name' => 'testname2',
'age' => 19,
],
[
'name' => 'testname3',
'age' => 18,
],
];
$servername = "localhost";
$port = 3306;
$username = "username";
$password = "password";
$dbname = "mytestdb";
//
$conn = new mysqli($servername, $username, $password, $dbname, $port);
//
if ($conn->connect_error) {
die("connect failed: " . $conn->connect_error);
}
$costBegin = microtime(true);
foreach($arr as $item) {
$sql = sprintf("INSERT INTO user_info (name, age) VALUES ( '%s', %d);", $item['name'], (int)$item['age']);
if ($conn->query($sql) === TRUE) {
echo "insert success";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$costEnd = microtime(true);
$cost = round($costEnd - $costBegin, 3);
var_dump($cost);
$conn->close();
大量のデータを大量に挿入する場合は、forループで挿入しても大丈夫です。時間が長いだけです。少量のデータの挿入と大量のデータの挿入を比較して、上のforを使って循環的に挿入すると時間がかかります。
条の数
時間(単位:秒)
10
0.011
1000
0.555
10000
5.733
100000
60.587
方法二、insert文を使って差し込みます。
mysqlにはinsert文を使って差し込むことができます。
INSERT INTO user_info (name, age) VALUES ('name1', 18), ('name2', 19);
は一回に二つのデータを挿入することを表しています。サンプルコードを見て、データバーの数を見てみます。
$arr = [
[
'name' => 'testname1',
'age' => 18,
],
[
'name' => 'testname2',
'age' => 19,
],
[
'name' => 'testname3',
'age' => 18,
],
//
……
……
];
$servername = "localhost";
$port = 3306;
$username = "username";
$password = "password";
$dbname = "mytestdb";
//
$conn = new mysqli($servername, $username, $password, $dbname, $port);
//
if ($conn->connect_error) {
die("connect failed: " . $conn->connect_error);
}
$costBegin = microtime(true);
if (!empty($arr)) {
$sql = sprintf("INSERT INTO user_info (name, age) VALUES ");
foreach($arr as $item) {
$itemStr = '( ';
$itemStr .= sprintf("'%s', %d", $item['name'], (int)$item['age']);
$itemStr .= '),';
$sql .= $itemStr;
}
// ,
$sql = rtrim($sql, ',');
$sql .= ';';
if ($conn->query($sql) === TRUE) {
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$costEnd = microtime(true);
$cost = round($costEnd - $costBegin, 3);
var_dump($cost);
$conn->close();
少量のデータと大量のデータの時間を比較してみます。全体の時間から、insertの差し込みは先ほどのfor循環よりも多くの時間が節約されていることが分かります。条の数
時間(単位:秒)
10
0.006
1000
0.025
10000
0.31
100000
1.23
もちろん、配列が大きすぎると思ったら、sqlエラーのリスクを減らすためにも、array gauを使うことができます。chunkは配列を指定の大きさのブロックに切り、各ブロックをinsert結合して挿入します。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考となる学習価値を持っています。質問があれば、メッセージを書いて交流してください。ありがとうございます。