6000 条信息同时写入mysql_一次性向mysql数据库中插入6000条数据 测试代码

之前遇到个问题,需要将一个文件夹中的所有文件名取出并 存入到数据库中。

采用php脚本测试,读取一个文件名,就立即存储到数据库中,结果花了我230多秒的时间,速度实在太慢!

原因分析:insert 语句被执行了6000次,导致速度特别慢!

改进方法:1、用php脚本 将 所有的文件名都存入到一个文本文件中filename.txt(一个文件名占一行),实测脚本执行时间 1.5262秒。

2、用php的fgets()函数取出filename.txt中的每一行数据,保存到buffer数组中,将buffer数组写入到一条insert语句中,

执行一次insert语句,实测脚本执行时间 0.0629秒。

代码1的功能是提取目录test下的文件名,并将其保存到“filename.txt”中如下:

$st=microtime_float();//自定义函数,在代码2中可见。

$cout=0;$dir="e:/pydot";$talbe="pydot2";

if(is_dir($dir)){

if($dh=opendir($dir)) {

while(($file=readdir($dh)) !== false){

if($file!="."&&$file!=".."){

$file=mb_convert_encoding($file,'UTF-8','EUC-CN');

$filename="test/filename.txt";

if(!$handle = fopen($filename, 'a')) {

echo "不能打开文件$filename";

exit;

}

//将$file写入到我们打开的文件中。

fputs($handle,$file."\n");

$cout++;

echo $file."
";

}

}

closedir($dh);

}

}

$et=microtime_float();

$t=$et-$st;

echo"insert into talbe ",$talbe,"",$cout,"times;\n
";

echo"Total time $t seconds.\n";

?>

代码2的功能是将“filename.txt”中的文件名存入到数据库中,如下:

$server='localhost';

$user='root';

$passwd='root';

$port='3306';

$dbname='dbname';

$talbe="tablename";

$c=0;$cc=0;

$st=microtime_float();

$link=mysql_connect($server,$user,$passwd);

if(!$link) {

die('Couldnot connect: ' . mysql_error());

}

else echo 'Connected successfully\n
';

mysql_select_db("catx",$link);

$handle= @fopen("sq.txt", "r");

//读取sq.txt中的内容,执行插入操作

while((fgets($handle, 256)) !== false) {

$buffer[$c]= fgets($handle, 256);

$c++;

if(0==$c%5978){

$c=0;$start_c="('";$end_c="');"; //

$va="";

$kh="'),('";//括号

for($i=0;$i<5978;$i++){

$va.=$buffer[$i].$kh; //拼接sql语句

}

$sql="insertinto tablename(name) values".$start_c.$va.$end_c;

mysql_query($sql);

}

$cc++;

}

$et=microtime_float();

$t=$et-$st;

echo"Totaltime $t seconds.\n
";

echo"insert into talbe ",$talbe,"",$cc,"times;\n
";

functionmicrotime_float()

{

list($usec, $sec) = explode(" ", microtime());

return ((float)$usec + (float)$sec);

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值