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

首頁 > 開發 > PHP > 正文

php中讀寫文件與讀寫數據庫的效率

2024-05-04 21:48:32
字體:
來源:轉載
供稿:網友

測試程序如下:說明1,由于讀數據庫語句調用簡單的封包函數兩次,所以把讀文件也改成連續調用兩次,數據庫記錄ID為1就在第一條,并且唯一索引.

測試實例代碼如下: 

  1. //說明2:測試兩次一次是4K數據,一次是整形數據 
  2.  
  3. set_time_limit(0); 
  4.  
  5. function fnGet($filename
  6.     $content = file_get_contents($filename); 
  7.     return $content
  8.  
  9. function fnGetContent($filename
  10.     $content = fnGet($filename); 
  11.     return $content
  12.      
  13. $times=100000;     
  14. echo '數據庫查詢結果:<br/>'
  15. //--------------------------------- 
  16. $begin=fnGetMicroTime(); 
  17. for($i=0;$i<$times;$i++) 
  18.     $res=$dbcon->mydb_query("SELECT log_Content FROM blog WHERE log_ID='1'"); 
  19.     $row=$dbcon->mydb_fetch_row($res); 
  20.     $content=$row[0]; 
  21. echo 'fetch_row '.$times.' 次時間:<font color=red>'.(fnGetMicroTime()-$begin).'</font>秒<br/>'
  22. //--------------------------------- 
  23.  
  24. $begin=fnGetMicroTime(); 
  25. for($i=0;$i<$times;$i++) 
  26.     $res=$dbcon->mydb_query("SELECT log_Content FROM blog WHERE log_ID='1'"); 
  27.     $row=$dbcon->mydb_fetch_array($res); 
  28.     $content=$row['log_Content'];     
  29. echo 'fetch_array '.$times.' 次時間:<font color=red>'.(fnGetMicroTime()-$begin).'</font>秒<br/>'
  30. //--------------------------------- 
  31.  
  32. $begin=fnGetMicroTime(); 
  33. for($i=0;$i<$times;$i++) 
  34.     $res=$dbcon->mydb_query("SELECT log_Content FROM blog WHERE log_ID='1'"); 
  35.     $row=$dbcon->mydb_fetch_object($res); 
  36.     $content=$row->log_Content;     
  37. echo 'fetch_object '.$times.' 次時間:<font color=red>'.(fnGetMicroTime()-$begin).'</font>秒<br/>'
  38. //--------------------------------- 
  39.  
  40. $dbcon->mydb_free_results(); 
  41. $dbcon->mydb_disconnect(); 
  42.  
  43. fnWriteCache('test.txt',$content); 
  44.  
  45. echo '直接讀文件測試結果:<br/>'
  46.  
  47. //--------------------------------- 
  48. $begin=fnGetMicroTime(); 
  49. for($i=0;$i<$times;$i++) 
  50.     $content = fnGetContent('test.txt'); 
  51. echo 'file_get_contents直接讀'.$times.'次時間:<font color=red>'.(fnGetMicroTime()-$begin).'</font>秒<br/>'
  52. //--------------------------------- 
  53.  
  54. $begin=fnGetMicroTime(); 
  55. for($i=0;$i<$times;$i++) 
  56. {//開源代碼Vevb.com 
  57.     $fname = 'test.txt'
  58.     if(file_exists($fname)) 
  59.      { 
  60.         $fp=fopen($fname,"r");//flock($fp,LOCK_EX);         
  61.         $file_data=fread($fpfilesize($fname));//rewind($fp);        
  62.         fclose($fp); 
  63.     } 
  64.     $content = fnGetContent('test.txt'); 
  65. }     
  66. echo 'fopen直接讀'.$times.'次時間:<font color=red>'.(fnGetMicroTime()-$begin).'</font>秒<br/>'

4K大小數據的查詢結果:

fetch_row 100000 次時間:16.737720012665秒

fetch_array 100000 次時間:16.661195993423秒

fetch_object 100000 次時間:16.775065898895秒

直接讀文件測試結果:

file_get_contents直接讀100000次時間:5.4631857872009秒

fopen直接讀100000次時間:11.463611125946秒

整形ID查詢結果:

fetch_row 100000 次時間:12.812072038651秒

fetch_array 100000 次時間:12.667390108109秒

fetch_object 100000 次時間:12.988099098206秒

直接讀文件測試結果:

file_get_contents直接讀100000次時間:5.6616430282593秒

fopen直接讀100000次時間:11.542816877365秒

測試結論:

1、直接讀文件相比數據庫查詢效率更勝一籌,而且文中還沒算上連接和斷開的時間。

2、一次讀取的內容越大,直接讀文件的優勢會越明顯,讀文件時間都是小幅增長,這跟文件存儲的連續性和簇大小等有關系,這個結果恰恰跟天緣預料的相反,說明MYSQL對更大文件讀取可能又附加了某些操作,兩次時間增長了近30%,如果只是單純的賦值轉換應該是差異偏小才對.

3、寫文件和INSERT幾乎不用測試就可以推測出,數據庫效率只會更差。

4、很小的配置文件如果不需要使用到數據庫特性,更加適合放到獨立文件里存取,無需單獨創建數據表或記錄,很大的文件比如圖片、音樂等采用文件存儲更為方便,只把路徑或縮略圖等索引信息放到數據庫里更合理一些.

5、PHP上如果只是讀文件,file_get_contents比fopen、fclose更有效率,不包括判斷存在這個函數時間會少3秒左右.

6、fetch_row和fetch_object應該是從fetch_array轉換而來的,天緣沒看過PHP的源碼,單從執行上就可以說明fetch_array效率更高,這跟網上的說法似乎相反.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵阳县| 公安县| 邹城市| 嘉鱼县| 博罗县| 雅江县| 黔西| 沂南县| 汝阳县| 永州市| 茌平县| 淮北市| 庆元县| 永顺县| 许昌县| 伊春市| 张掖市| 夹江县| 宿州市| 博客| 阳山县| 富宁县| 根河市| 小金县| 广安市| 海兴县| 潍坊市| 东方市| 清镇市| 深泽县| 莎车县| 呼图壁县| 广南县| 惠东县| 平顶山市| 五河县| 丰都县| 陇西县| 老河口市| 依安县| 玉林市|