欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php垃圾代碼優(yōu)化操作代碼

 更新時(shí)間:2010年08月05日 15:44:32   作者:  
php 代碼優(yōu)化提高M(jìn)ySQl的運(yùn)行效率。遇到同類問題的朋友可以參考下。
公司有幾個(gè)網(wǎng)站搭在美國的虛擬主機(jī)上,服務(wù)器上的mysql服務(wù)差不多每一天都會(huì)突然不知什么時(shí)候掛掉,然后過一會(huì)又恢復(fù)了,懷疑是超出cpu的使用限制而被自動(dòng)結(jié)束了,但是實(shí)際上該服務(wù)器上的流量很小。于是早先的時(shí)候聯(lián)系了服務(wù)器提供商的印度阿三客服,想看看是不是其他用戶搞多了害的大家一起死,阿三們查找了之后,信誓旦旦的拍著長毛的胸部保證不是他們的問題,事情沒有解決。懸著不是個(gè)事,只好自己查了,好在可以訪問到information_schema庫,看了看,沒話了,user_statistics里面的數(shù)據(jù)顯示我們的一個(gè)mysql用戶在busy_time,cpu_time等指標(biāo)上都高到不行,自己的事,好在阿三沒有發(fā)現(xiàn)。于是趕緊查程序,之前的這個(gè)網(wǎng)站程序不是由我做的,但是知道里面問題很多,架構(gòu)到實(shí)現(xiàn)都有問題,但是頁面不是一般的多,代碼夾雜著html,全看過去還不死,(這種時(shí)候就尤為的覺著mvc多美妙),平時(shí)能湊合著運(yùn)行就可以了,反正沒有什么訪問量。

既然是mysql的負(fù)擔(dān)重,那就先找這個(gè),本地上搞一個(gè)網(wǎng)站的鏡像運(yùn)行下,在my.ini里修改添加

復(fù)制代碼 代碼如下:

[mysqld]
log="d:/temp/mysql.log"
log_slow_queries="d:/temp/mysql_slow.log"
long_query_time=1


這個(gè)目錄是要已經(jīng)存在的。重啟mysql服務(wù),就可以記錄了。

查看sql記錄后大吃一驚,查詢的數(shù)量驚人,隨便一個(gè)頁面,sql查詢都在幾十條,多的有上千條!

以論壇來說吧,一個(gè)頁面的數(shù)據(jù)庫查詢次數(shù)也就是10次一下,用了緩存的還可以再低。這樣算的話,就相當(dāng)于原來幾十倍的負(fù)擔(dān),能不掛?

誰人也不能那邊有毅力寫下上百條的查詢啊,所以肯定是循環(huán)查詢。sql語句也表明這一點(diǎn)。知道原因了就好改了,找到相關(guān)頁面,改掉循環(huán)查詢,例如,有一個(gè)頁面,要顯示所有地區(qū)分類和該分類下的文章數(shù),先不考慮數(shù)據(jù)庫的結(jié)構(gòu)優(yōu)化,就程序而言,原來的大概是這樣子的
復(fù)制代碼 代碼如下:

$sql1="SELECT aid,count(*) as cc FROM pz_content WHERE uid=$uid group by aid";
$rs1=$db->query($sql1);
if(is_array($rs1)){
foreach($rs1 as $r1){
輸出...
echo id2name($r1->aid);
}
}
............
function id2name($aid)
{
$sql="select ename from pz_area_a where aid_a=".$id;
$result=mysql_query($sql);
$row=mysql_fetch_object($result);
return $row->ename;
}

先不管代碼的容錯(cuò),看實(shí)現(xiàn)就知道,他先讀取了該用戶的相關(guān)文章并按地區(qū)ID進(jìn)行了分組和統(tǒng)計(jì)個(gè)數(shù),然后再每個(gè)地區(qū)每個(gè)地區(qū)地輸出地區(qū)名字,所以,如果有1w個(gè)地區(qū),這里就要查詢1w次。放上一個(gè)計(jì)時(shí)的代碼,看了下,大概耗用內(nèi)存6M,執(zhí)行時(shí)間16秒,累計(jì)查詢1001次

其實(shí),這里是只要用一句sql就可以搞定的事情,并不需要循環(huán)。

復(fù)制代碼 代碼如下:

$sql1="select pz_area.aid,pz_area.ename,tb1.cc from pz_area right join (SELECT aid,count(*) as cc FROM pz_content WHERE uid=$uid group by aid) as tb1 on pz_area.aid=tb1.aid";
$rs1=$db->query($sql1);
if(is_array($rs1)){
  foreach($rs1 as $r1){
輸出...
   echo $r1->ename;
  }
}

問題就可以解決了。重新運(yùn)行下,內(nèi)存耗用差不多,查詢1次,CPU執(zhí)行時(shí)間只有647毫秒,和原來的差了26倍!再看一下,發(fā)現(xiàn)這個(gè)pz_content的表,記錄還算比較多的,有經(jīng)常要按地區(qū)查詢劃分之類的,但是原來什么索引也沒有。順道在aid上加上一個(gè)索引,執(zhí)行時(shí)間縮短到432毫秒。

這個(gè)頁面的事情算了了,先到這里,下次繼續(xù)。

相關(guān)文章

  • PHP合并數(shù)組函數(shù)array_merge用法分析

    PHP合并數(shù)組函數(shù)array_merge用法分析

    這篇文章主要介紹了PHP合并數(shù)組函數(shù)array_merge用法,結(jié)合實(shí)例形式分析了php數(shù)組合并函數(shù)array_merge的具體功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-02-02
  • PHP中文字符串截?cái)酂o亂碼解決方法

    PHP中文字符串截?cái)酂o亂碼解決方法

    這篇文章主要為大家詳細(xì)介紹了PHP獲取用戶客戶端真實(shí)IP的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • How do I change MySQL timezone?

    How do I change MySQL timezone?

    The MySQL timezone is set to MST (-7 hours GMT/UTC) and is not configurable by you. MySQL is only capable of having 1 timezone setting per mysql daemon. Therefore, you cannot select NOW() and expect a result in a timezone other than MST.
    2008-03-03
  • 通達(dá)OA公共代碼 php常用檢測函數(shù)

    通達(dá)OA公共代碼 php常用檢測函數(shù)

    從通達(dá)OA公共代碼扒下的php常用檢測函數(shù)代碼,學(xué)習(xí)php的朋友可以參考下。
    2011-12-12
  • 淺談PHP中的錯(cuò)誤處理和異常處理

    淺談PHP中的錯(cuò)誤處理和異常處理

    下面小編就為大家?guī)硪黄獪\談PHP中的錯(cuò)誤處理和異常處理。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • PHP實(shí)現(xiàn)上傳多圖即時(shí)顯示與即時(shí)刪除的方法

    PHP實(shí)現(xiàn)上傳多圖即時(shí)顯示與即時(shí)刪除的方法

    這篇文章主要介紹了PHP實(shí)現(xiàn)上傳多圖即時(shí)顯示與即時(shí)刪除的方法,結(jié)合實(shí)例形式分析了php針對(duì)圖片文件的預(yù)覽、上傳及刪除相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • PHP備份數(shù)據(jù)庫生成SQL文件并下載的函數(shù)代碼

    PHP備份數(shù)據(jù)庫生成SQL文件并下載的函數(shù)代碼

    這是一個(gè)將指定數(shù)據(jù)庫里的所有表備份為一個(gè)SQL文件,可下載。這個(gè)源碼來自dedecms程序,功能挺多,也很實(shí)用,但是代碼的質(zhì)量還有待提高
    2012-02-02
  • PHP中error_reporting()用法詳解

    PHP中error_reporting()用法詳解

    php中我們對(duì)錯(cuò)誤的處理會(huì)常用到error_reporting函數(shù)了,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE)了,這個(gè)到底什么意思呢,下面我來來看看。
    2015-08-08
  • php限制文件下載速度的代碼

    php限制文件下載速度的代碼

    這篇文章主要介紹了php限制文件下載速度的代碼,配有詳細(xì)的代碼分析,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 淺析PHP Socket技術(shù)

    淺析PHP Socket技術(shù)

    使用并發(fā)起一個(gè)阻塞式(block)連接,即服務(wù)器如果不返回?cái)?shù)據(jù)流,則一直保持連接狀態(tài),一旦有數(shù)據(jù)流傳入,取得內(nèi)容后就立即斷開連接
    2013-08-08

最新評(píng)論