mysql插入大量数据,时间的优化。

背景:

    业务场景假设,公司原有excel记录了千万级客户的相关数据,公司业务结构实现了信息化的布局,需要在新开发的CRM系统中导入千万级的客户数据。此时需要用到mysql的insert操作来插入用户的海量数据。

     普通情况下,会使用for循环一条一条的插入数据。

     假设客户的数据量为10条数据。

$connect=@mysql_connect("localhost","root","") or die(mysql_error());
@mysql_select_db("test") or die(mysql_error());
@mysql_query("set names utf-8");
$start_time=microtime(true);
/*
 * 方法一,循环插入mysql数据
 */
$sql="insert into test_table(value) values('1')";
for($i=0;$i<100000;$i++)
{
    @mysql_query($sql) or die(mysql_error());
}

$end_time=microtime(true);

echo "程序的运行时间为:".($end_time-$start_time);

  

   由上图可见,程序运行速度非常慢,严重影响用户体验。

   

   优化,对客户的插入数据进行优化。

   速度优化的核心法则,使用"insert into table value(value1,value2.......)";

   既使用一条sql语句,对数据进行插入处理。

$connect=@mysql_connect("localhost","root","") or die(mysql_error());
@mysql_select_db("test") or die(mysql_error());
@mysql_query("set names utf-8");
$start_time=microtime(true);


 /*
 * 方法二,拼接插入mysql数据
 */

$sql="insert into test_table(value) values";
for($i=0;$i<100000;$i++)
{
$sql.="('1'),";
}
$sql=substr($sql,0,strlen($sql)-1);
@mysql_query($sql) or die(mysql_error());
$end_time=microtime(true);
echo "程序的运行时间为:".($end_time-$start_time);

 由上图可见,同样的10万级的数据插入,速度已经从15s优化到了0.5s。  

你可能感兴趣的:(mysql)