以前开发的系统,目前要大数据插入操作。3万多条数据,每一条数据20个字段。数据表按月分配。一月一表。数据库设计时,知道要大量插入,所以没有加主键,只对一个唯一字段修改为unique类型。代码逻辑。
读取csv文件一行数据 用fgetcsv函数读取
插入该条数据,
判断返回值
if==0
代表本月有重复,不理。
if==1
代表本月没重复,根据ID查找上个表。看是否有值。结果==0
上表无重复 跳过结果==1
修改上表内容,并删除刚插入数据。这样的逻辑 在上月表中有5W数据,本月表7W数据时。插入3W数据时,IE会出现404错误。不知道如何进一步优化数据库,能让添加更快呢?或者如何能避免IE死掉的问题。
先感谢耐心看完的前辈们。等待高手指点一二。
读取csv文件一行数据 用fgetcsv函数读取
插入该条数据,
判断返回值
if==0
代表本月有重复,不理。
if==1
代表本月没重复,根据ID查找上个表。看是否有值。结果==0
上表无重复 跳过结果==1
修改上表内容,并删除刚插入数据。这样的逻辑 在上月表中有5W数据,本月表7W数据时。插入3W数据时,IE会出现404错误。不知道如何进一步优化数据库,能让添加更快呢?或者如何能避免IE死掉的问题。
先感谢耐心看完的前辈们。等待高手指点一二。
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒memory_limit = 128M ;每个PHP页面所吃掉的最大内存,默认8M
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
} /* prepare statement */
if ($stmt = $mysqli->prepare("SELECT Code, Name FROM Country ORDER BY Name LIMIT 5")) {
$stmt->execute(); /* bind variables to prepared statement */
$stmt->bind_result($col1, $col2); /* fetch values */
while ($stmt->fetch()) {
printf("%s %s\n", $col1, $col2);
} /* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close(); ?>
$db = new mysqli('127.0.0.1','root','123456','testdb');
for($i=1;$i<=30000;$i++)
{
$va="abcdefghigklmn";
$vb="abcdefghigklmn";
$vc="abcdefghigklmn";
$vd="abcdefghigklmn";
$ve="abcdefghigklmn";
$vf="abcdefghigklmn";
$vgg="abcdefghigklmn";
$vh="abcdefghigklmn";
$vi="abcdefghigklmn";
$vj="abcdefghigklmn";
$vk="abcdefghigklmn";
$vl="abcdefghigklmn";
$vm="abcdefghigklmn";
$vn="abcdefghigklmn";
$vo="abcdefghigklmn";
$vp="abcdefghigklmn";
$vq="abcdefghigklmn";
$vr="abcdefghigklmn";
$vs="abcdefghigklmn";
$vt="abcdefghigklmn";
$sql="insert into testdb (va,vb,vc,vd,ve,vf,vgg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,vt) values('$va','$vb','$vc','$vd','$ve','$vf','$vgg','$vh','$vi','$vj','$vk','$vl','$vm','$vn','$vo','$vp','$vq','$vr','$vs','$vt')";
$db->query($sql);
页面执行时间: 7427.5 毫秒
我是就是普通的pc机呀。感觉不慢,还可以!
$db->query($sql); 不要执行 30000次$db->query($sql)
1次可以了,sql写成insert into testdb (va,vb,vc,vd,ve,vf,vgg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,vt) values('$va','$vb','$vc','$vd','$ve','$vf','$vgg','$vh','$vi','$vj','$vk','$vl','$vm','$vn','$vo','$vp','$vq','$vr','$vs','$vt'),('$va','$vb','$vc','$vd','$ve','$vf','$vgg','$vh','$vi','$vj','$vk','$vl','$vm','$vn','$vo','$vp','$vq','$vr','$vs','$vt')
再用 LOAD DATA INFILE , 或者 mysql 命令行加载才是最快的方法设定了unique key 字段就不需要再在程序中判断是否重复
mysql 会自己根据index跳过重复记录