测试环境:phpstudy
PHP 5.6.27 + mysql 5.6+apache 2.4
我的表结构如下:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userindex` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
第一种-》传统for循环插入:核心代码如下
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = 'test';
// 创建连接
$conn = new mysqli($servername,$username,$password,$dbname);
$start = time();
// 传统插入
for ($x=0; $x<=200000; $x++) {
$sql = 'insert into user (userindex) values ('.$x.')';
$conn->query($sql);
}
$end = time();
echo '传统插入耗时:'.($end-$start);
//关闭连接
$conn->close();
?>
测试耗时:
第二种方法:使用事务提交,批量插入数据库(每隔5W条提交下)
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = 'test';
// 创建连接
$conn = new mysqli($servername,$username,$password,$dbname);
$start = time();
$conn->query('BEGIN');
for($i=0;$i<100000;$i++){
$sql = 'insert into user (userindex) values ('.$i.')';
$conn->query($sql);
if($i%50000==0){
$conn->query('COMMIT');
$conn->query('BEGIN');
}
}
$end = time();
echo '分段事务插入耗时:'.($end-$start);
//关闭连接
$conn->close();
?>
测试耗时:
第三种方法:使用优化SQL语句:将SQL语句进行拼接
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = 'test';
// 创建连接
$conn = new mysqli($servername,$username,$password,$dbname);
$start = time();
$sql= "insert into user (userindex) values";
for($i=0;$i<100000;$i++){
$sql.="('$i'),";
}
// 去除最后一个逗号
$sql = substr($sql,0,strlen($sql)-1);
$conn->query($sql);
$end = time();
echo 'sql语句拼接插入耗时:'.($end-$start);
//关闭连接
$conn->close();
?>
测试耗时:
三种批量插入比较之下你应该知道哪一种才是更好的了。
|
|