SELECT * FROM Persons
p
– 批量插入
INSERT INTO Persons
VALUES(‘bx9’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx1’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx2’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx3’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx4’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx5’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx6’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx7’,‘z’,‘上海’,‘松江’,‘2’)
,(‘bx8’,‘z’,‘上海’,‘松江’,‘2’);
– 批量修改
第一种方法:使用insert into 插入,代码如下:
代码如下
p
a
r
a
m
s
=
a
r
r
a
y
(
′
v
a
l
u
e
′
=
>
′
5
0
′
)
;
s
e
t
t
i
m
e
l
i
m
i
t
(
0
)
;
e
c
h
o
d
a
t
e
(
"
H
:
i
:
s
"
)
;
f
o
r
(
params = array('value'=>'50'); set_time_limit(0); echo date("H:i:s"); for(
params=array(′value′=>′50′);settimelimit(0);echodate("H:i:s");for(i=0;
i
<
2000000
;
i<2000000;
i<2000000;i++){
c
o
n
n
e
c
t
m
y
s
q
l
−
>
i
n
s
e
r
t
(
connect_mysql->insert(
connectmysql−>insert(params);
};
echo date(“H:i:s”);
最后显示为:23:25:05 01:32:05 也就是花了2个小时多!
第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒 ,代码如下:
代码如下
echo date(“H:i:s”);
$connect_mysql->query(‘BEGIN’);
p
a
r
a
m
s
=
a
r
r
a
y
(
′
v
a
l
u
e
′
=
>
′
5
0
′
)
;
f
o
r
(
params = array('value'=>'50'); for(
params=array(′value′=>′50′);for(i=0;
i
<
2000000
;
i<2000000;
i<2000000;i++){
c
o
n
n
e
c
t
m
y
s
q
l
−
>
i
n
s
e
r
t
(
connect_mysql->insert(
connectmysql−>insert(params);
if($i%100000==0){
$connect_mysql->query(‘COMMIT’);
$connect_mysql->query(‘BEGIN’);
}
}
$connect_mysql->query(‘COMMIT’);
echo date(“H:i:s”);
第三种方法:使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values (),(),(),()然后再一次性插入,如果字符串太长,
则需要配置下MYSQL,在mysql 命令行中运行 :set global max_allowed_packet = 210241024*10;消耗时间为:11:24:06 11:25:06;
插入200W条测试数据仅仅用了1分钟!代码如下:
代码如下
s
q
l
=
"
i
n
s
e
r
t
i
n
t
o
t
w
e
n
t
y
m
i
l
l
i
o
n
(
v
a
l
u
e
)
v
a
l
u
e
s
"
;
f
o
r
(
sql= "insert into twenty_million (value) values"; for(
sql="insertintotwentymillion(value)values";for(i=0;
i
<
2000000
;
i<2000000;
i<2000000;i++){
$sql.="(‘50’),";
};
s
q
l
=
s
u
b
s
t
r
(
sql = substr(
sql=substr(sql,0,strlen($sql)-1);
c
o
n
n
e
c
t
m
y
s
q
l
−
>
q
u
e
r
y
(
connect_mysql->query(
connectmysql−>query(sql);