php導(dǎo)入大量數(shù)據(jù)到mysql性能優(yōu)化技巧
本文實(shí)例講述了php導(dǎo)入大量數(shù)據(jù)到mysql性能優(yōu)化技巧。分享給大家供大家參考。具體分析如下:
在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)化為代碼,差不多如下:
for($i=0; $i<count($array); $i++)
{
$tmpstr = "'". $array[$i] ."','". $str ."'";
$sql="INSERT INTO ".$usertable." (tel,type) VALUES (".$tmpstr.")";
mysql_query($sql);
}
以上代碼完全正確,但是效率低下,當(dāng)txt文件里包含了上萬個電話號碼時,即會有上萬次的插入數(shù)據(jù)庫操作,雖然每次的數(shù)據(jù)庫寫入操作都是很快的,但是上萬條累計下來,這個執(zhí)行時間不容忽視,tiandi簡單的測試了一下插入15000萬條記錄,耗時差不多5分鐘,如果再加上之前的邏輯判斷等等過程,那么半個小時還真得不算少了,這樣可不行,必須減少數(shù)據(jù)庫庫寫入次數(shù)才對,于是上面代碼變更為以下:
for($i=0; $i<count($array); $i++)
{
$tmpstr = "'". $array[$i] ."','". $str ."'";
$sql2 .= "(".$tmpstr."),";
}
$sql2 = substr($sql2,0,-1); //去除最后的逗號
mysql_query($sql2);
這樣,整個寫入操作只有1次,大大地縮短了執(zhí)行時間,差不多10秒就搞定了15000條記錄,好了,本文到此結(jié)束,如果你也遇上寫入大量數(shù)據(jù)到mysql耗時長的問題時,不如試試本文的優(yōu)化方式.
希望本文所述對大家的php程序設(shè)計有所幫助。
- 發(fā)款php蜘蛛統(tǒng)計插件只要有mysql就可用
- PHP使用redis實(shí)現(xiàn)統(tǒng)計緩存mysql壓力的方法
- PHP+Mysql+jQuery中國地圖區(qū)域數(shù)據(jù)統(tǒng)計實(shí)例講解
- PHP+Mysql+jQuery文件下載次數(shù)統(tǒng)計實(shí)例講解
- PHP+MySQL統(tǒng)計該庫中每個表的記錄數(shù)并按遞減順序排列的方法
- php 廣告點(diǎn)擊統(tǒng)計代碼(php+mysql)
- php下MYSQL limit的優(yōu)化
- php+mysql查詢優(yōu)化簡單實(shí)例
- 優(yōu)化使用mysql存儲session的php代碼
- PHP數(shù)據(jù)庫編程之MySQL優(yōu)化策略概述
- PHP+MySQL實(shí)現(xiàn)對一段時間內(nèi)每天數(shù)據(jù)統(tǒng)計優(yōu)化操作實(shí)例
相關(guān)文章
php實(shí)現(xiàn)將二維關(guān)聯(lián)數(shù)組轉(zhuǎn)換成字符串的方法詳解
這篇文章主要介紹了php實(shí)現(xiàn)將二維關(guān)聯(lián)數(shù)組轉(zhuǎn)換成字符串的方法,涉及php數(shù)組遞歸遍歷、轉(zhuǎn)換、去重、拼接等相關(guān)操作技巧,需要的朋友可以參考下2017-07-07PHP基于單例模式實(shí)現(xiàn)的數(shù)據(jù)庫操作基類
這篇文章主要介紹了PHP基于單例模式實(shí)現(xiàn)的數(shù)據(jù)庫操作基類,涉及PHP操作數(shù)據(jù)庫的基本配置與增刪改查等操作技巧,需要的朋友可以參考下2016-01-01PHP實(shí)現(xiàn)將漢字轉(zhuǎn)換為拼音及獲取詞語首字母的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將漢字轉(zhuǎn)換為拼音及獲取詞語首字母的方法,涉及php字符串、數(shù)組的遍歷及編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-08-08PHP獲取數(shù)組中某元素的位置及array_keys函數(shù)應(yīng)用
獲取數(shù)組中一元素的位置有很多方法,其中PHP自身就已經(jīng)內(nèi)置了一個函數(shù)array_keys(),下邊的代碼能夠打印出所有PHP的內(nèi)置函數(shù),感興趣的朋友可以了解下同時學(xué)習(xí)一下函數(shù)array_keys()的使用方法,就當(dāng)鞏固知識量啦2013-01-01php使用str_replace替換多維數(shù)組的實(shí)現(xiàn)方法分析
這篇文章主要介紹了php使用str_replace替換多維數(shù)組的實(shí)現(xiàn)方法,結(jié)合具體實(shí)例對比分析了php針對多維數(shù)組的遍歷與替換操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-06-06PHP實(shí)現(xiàn)創(chuàng)建以太坊錢包轉(zhuǎn)賬等功能
這篇文章主要介紹了PHP實(shí)現(xiàn)創(chuàng)建以太坊錢包轉(zhuǎn)賬等功能,對以太坊感興趣的同學(xué),可以參考下2021-04-04