激情小说强奸乱伦亚洲色图_欧美xxxx性受黑人xyx性爽_国产www亚洲а∨天堂一区_日本无码线亚洲中文精品_国产女厕所盗摄老师厕所嘘嘘_香蕉视频在线观看亚洲_久久国产亚洲AV无码麻软件_18禁白浆欧美一区二区三区_国产午夜av无码无片久久96_国产成人精品福利视频

27
18911184380
當(dāng)前位置:首頁 > 資訊 > 建站知識

PHP查詢MySQL大量數(shù)據(jù)的內(nèi)存占用分析

2011-10-22 酷站科技

PHP查尋MySQL很多數(shù)據(jù)信息的內(nèi)存占用剖析

      本文關(guān)鍵是以基本原理, 指南和源代碼剖析在PHP中查尋MySQL回到很多結(jié)果時, 內(nèi)存占用的難題, 另外對應(yīng)用MySQL C API也是有涉及到.

  昨日, 有朋友在PHP探討群內(nèi)提及, 他做的一個新項目因為MySQL查尋回到的結(jié)果過多(達十萬條), 進而造成PHP存儲空間不足用. 因此, 他問, 在實行下邊的編碼解析xml回到的MySQL結(jié)果以前, 數(shù)據(jù)信息是不是早已在運行內(nèi)存中了? -

  1. while ($row = mysql_fetch_assoc($result)) { 
  2.     // ... 

  自然, 這類難題有很多優(yōu)化的方式 . 但是, 就這個難題而言, 我最先想起, MySQL是經(jīng)典的C/S(Client/Server, 手機客戶端/網(wǎng)絡(luò)服務(wù)器)實體模型, 在解析xml結(jié)果集以前, 最底層的完成很有可能早已把全部的數(shù)據(jù)信息根據(jù)互聯(lián)網(wǎng)(假定應(yīng)用TCP/IP)讀來到Client的緩沖區(qū)域, 也是有另一種很有可能, 便是數(shù)據(jù)信息仍在Server端發(fā)送緩沖區(qū)里, 并沒有發(fā)送給Client.

  在查詢PHP和MySQL的源代碼以前, 我注意到PHP指南里有兩個作用相仿的涵數(shù):

  1. mysql_query() 
  2.  
  3. mysql_unbuffered_query() 

  2個涵數(shù)的字面意思和表明確認了我的想法, 前一個涵數(shù)實行時, 會把全部的結(jié)果集從Server端讀完Client端緩沖區(qū)域中, 然后一個則沒有, 這就是”unbuffered(未緩存)”的含意.

  那就是說, 假如用mysql_unbuffered_query()實行了一條回到很多結(jié)果集的SQL句子, 在解析xml結(jié)果以前, PHP的運行內(nèi)存是沒有被結(jié)果集占有的. 而用mysql_query()來實行一樣的句子得話, 涵數(shù)回到時, PHP的內(nèi)存占用便會大幅度提升, 馬上耗完運行內(nèi)存.

  假如閱讀文章PHP的有關(guān)編碼, 能夠見到這兩個涵數(shù)的完成上的不同點:

  1. /* {{{ proto resource mysql_query(string query [, int link_identifier]) 
  2.    Sends an SQL query to MySQL */ 
  3. PHP_FUNCTION(mysql_query) 
  4.     php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_STORE_RESULT); 
  5. /* }}} */ 
  6.  
  7. /* {{{ proto resource mysql_unbuffered_query(string query [, int link_identifier]) 
  8.    Sends an SQL query to MySQL, without fetching and buffering the result rows */ 
  9. PHP_FUNCTION(mysql_unbuffered_query) 
  10.     php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_USE_RESULT); 
  11. /* }}} */ 

  2個涵數(shù)都啟用了php_mysql_do_query(), 只差了第2個主要參數(shù)的不一樣, MYSQL_STORE_RESULT和MYSQL_USE_RESULT. 再看php_mysql_do_query()的完成:

  1. if(use_store == MYSQL_USE_RESULT) { 
  2.     mysql_result=mysql_use_result(&mysql->conn); 
  3. else { 
  4.     mysql_result=mysql_store_result(&mysql->conn); 

  mysql_use_result()和mysql_store_result()是MySQL的C API函數(shù), 這兩個C API函數(shù)的差別便是后面一種把結(jié)果集從MySQL Server端所有載入來到Client端, 前面一種僅僅載入了結(jié)果集的元信息內(nèi)容.

  返回PHP, 應(yīng)用mysql_unbuffered_query(), 能夠防止運行內(nèi)存的馬上占有. 假如在解析xml的全過程不對結(jié)果開展”PHP緩存文件”(如放進某數(shù)字能量數(shù)組中), 則全部實行全過程盡管實際操作了十萬條或是百萬條或是大量的數(shù)據(jù)信息, 但PHP占有的運行內(nèi)存自始至終是十分小的.

標識:北京市網(wǎng)站制作 高檔網(wǎng)站建設(shè)

來源于申明:以上內(nèi)容一部分(包括照片、文本)來自互聯(lián)網(wǎng),若有侵權(quán)行為,請立即與本網(wǎng)站聯(lián)絡(luò)(010-57218159)。
如沒特殊注明,文章均為酷站科技原創(chuàng),轉(zhuǎn)載請注明來自http://www.ttscar.com.cn/jianzhanzhishi/3333.html
聯(lián)系專業(yè)的商務(wù)顧問,制定方案,專業(yè)設(shè)計,一對一咨詢及其報價詳情
服務(wù)熱線服務(wù)熱線 18911184380
聯(lián)系我們 contact us
18911184380
0531-88903031 — 濟南分部

+

酷站科技為你提供上門/網(wǎng)站策略方案

留下聯(lián)系方式,我們將會在一個工作日內(nèi)與你聯(lián)系

隱私條款信息保護中,請放心填寫