蜜桃AV国内精品自在线拍_亚洲美女一级黄色片_a一级黄片在线观_国产无精乱码一区二区三区_欧美在线视频一区二区_精品一久久香蕉国产二月_五月天一区二区在线观看

27
18911184380
當前位置:首頁 > 資訊 > 建站知識

PHP查詢MySQL大量數據的內存占用分析

2011-10-22 酷站科技

PHP查尋MySQL很多數據信息的內存占用剖析

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

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

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

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

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

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

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

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

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

  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個涵數都啟用了php_mysql_do_query(), 只差了第2個主要參數的不一樣, 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函數, 這兩個C API函數的差別便是后面一種把結果集從MySQL Server端所有載入來到Client端, 前面一種僅僅載入了結果集的元信息內容.

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

標識:北京市網站制作 高檔網站建設

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

+

酷站科技為你提供上門/網站策略方案

留下聯系方式,我們將會在一個工作日內與你聯系

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