国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php導(dǎo)入大量數(shù)據(jù)到mysql性能優(yōu)化

2024-05-04 21:49:11
字體:
供稿:網(wǎng)友

在mysql中我們結(jié)合php把一些文件導(dǎo)入到mysql中,下面我來分享我對15000條記錄進(jìn)行導(dǎo)入時分析與優(yōu)化,各位朋友可參考.

之前有幾篇文章,說了最近tiandi在幫朋友做一個小項(xiàng)目,用于統(tǒng)計電話號碼的,每次按需求從數(shù)據(jù)庫里隨機(jī)生成打包的電話號碼,然后不停地讓人打這些電話號碼推銷產(chǎn)品(小小鄙視一下這樣的行為)。但是朋友要求幫忙,咱也不能不幫啊,是吧。程序兩個星期前已經(jīng)做好,測試完畢交工。前幾天朋友來電說,每天導(dǎo)入電話號碼的時間越來越長,有時候一萬條記錄就要半個小時以上,看看能不能想辦法提高一下這個速度。

我理了一下思路,數(shù)據(jù)庫結(jié)構(gòu)很簡單,可以認(rèn)為就兩個字段,一個字段存電話號碼,另一字段存類別,類別分別為c,d,e等等,分別代表已經(jīng)撥通過此電話,未撥通過此電話,未撥打過此電話等等狀態(tài),而整個程序邏輯是這樣的.

■拿到一個txt文件,里面存的是電話號碼

■通過程序?qū)xt文件導(dǎo)入到mysql里

■導(dǎo)入的時候,檢測txt里的電話號碼是否和mysql里的重復(fù),如果不重復(fù),直接插入新記錄,如果重復(fù),就需要按照判斷電話號碼所屬類別來進(jìn)行更新。

由于每個txt里的電話號碼導(dǎo)入時,都需要做一次比較,所以程序肯定會耗時一些,這里我們先撇開這個原因,因?yàn)楸疚恼碌臉?biāo)題是優(yōu)化寫入速度,那么程序什么時候會寫入記錄呢?通過上面的邏輯得知,在匹配數(shù)據(jù)庫時,沒有發(fā)現(xiàn)存在記錄時會發(fā)生寫入數(shù)據(jù)庫操作(當(dāng)然update也算,只是這里只討論insert),那么將上述邏輯轉(zhuǎn)化為代碼,差不多如下:

  1. //$array為txt文件explode出來的數(shù)組,每一個為一個電話號碼, $str為類型 
  2. for($i=0; $i<count($array); $i++)  
  3.     {  
  4.         $tmpstr = "'"$array[$i] ."','"$str ."'"
  5.         $sql="INSERT INTO ".$usertable." (tel,type) VALUES (".$tmpstr.")"
  6.         mysql_query($sql); 
  7.     } 

以上代碼完全正確,但是效率低下,當(dāng)txt文件里包含了上萬個電話號碼時,即會有上萬次的插入數(shù)據(jù)庫操作,雖然每次的數(shù)據(jù)庫寫入操作都是很快的,但是上萬條累計下來,這個執(zhí)行時間不容忽視,tiandi簡單的測試了一下插入15000萬條記錄,耗時差不多5分鐘,如果再加上之前的邏輯判斷等等過程,那么半個小時還真得不算少了,這樣可不行,必須減少數(shù)據(jù)庫庫寫入次數(shù)才對,于是上面代碼變更為以下:

  1. $sql2="INSERT INTO ".$usertable." (tel,type,updatetime) VALUES"
  2. for($i=0; $i<count($array); $i++)  
  3.     {  
  4.         $tmpstr = "'"$array[$i] ."','"$str ."'"
  5.  $sql2 .= "(".$tmpstr."),"
  6.     } 
  7. $sql2 = substr($sql2,0,-1);   //去除最后的逗號 
  8. mysql_query($sql2); 

這樣,整個寫入操作只有1次,大大地縮短了執(zhí)行時間,差不多10秒就搞定了15000條記錄,好了,本文到此結(jié)束,如果你也遇上寫入大量數(shù)據(jù)到mysql耗時長的問題時,不如試試本文的優(yōu)化方式.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大厂| 巴马| 巴林右旗| 成武县| 八宿县| 鄂托克前旗| 邢台市| 西平县| 大埔县| 永川市| 江阴市| 苍梧县| 蒙自县| 南雄市| 沿河| 定日县| 邯郸市| 昌江| 瑞金市| 绍兴市| 麻栗坡县| 天峨县| 新沂市| 北京市| 潜江市| 清苑县| 广灵县| 兴化市| 杭州市| 清苑县| 板桥市| 台东市| 达拉特旗| 商河县| 桐城市| 伊金霍洛旗| 高青县| 瑞丽市| 闸北区| 滕州市| 札达县|