1. 程式人生 > >mysql插入大量資料,時間的優化。

mysql插入大量資料,時間的優化。

背景:

    業務場景假設,公司原有excel記錄了千萬級客戶的相關資料,公司業務結構實現了資訊化的佈局,需要在新開發的CRM系統中匯入千萬級的客戶資料。此時需要用到mysql的insert操作來插入使用者的海量資料。

     普通情況下,會使用for迴圈一條一條的插入資料。

     假設客戶的資料量為10條資料。

<?php
$connect[email protected]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[email protected]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。