php中读写文件与读写数据库的效率比较分享 |
本文标签:读写文件,读写数据库,效率 这个问题也是最近才想到的,就是到底读文件更快还是读数据库更快,能快多少,天缘也搜索过,没见有网友就这个问题答复过,也可能是太简单的缘故,我们本文还是来实测一下,由于时间关系,VC还没装,天缘先用PHP测试了一下,下次有时间在C/C++上补充测试到本文来,因为PHP的底层解析应该也是基于C的,所以估计两者环境测试结果差不多,小问题大收获,现在就来看一下测试过程及结果 。 测试程序如下: 说明1:由于读数据库语句调用简单的封包函数两次,所以把读文件也改成连续调用两次,数据库记录ID为1就在第一条,并且唯一索引 。 复制代码 代码如下: set_time_limit(0); function fnGet($filename) { $content = file_get_contents($filename); return $content; } function fnGetContent($filename) { $content = fnGet($filename); return $content; } $times=100000; echo 数据库查询结果:<br/>; //--------------------------------- $begin=fnGetMicroTime(); for($i=0;$i<$times;$i++) { $res=$dbcon->mydb_query("SELECT log_Content FROM blog WHERE log_ID=1"); $row=$dbcon->mydb_fetch_row($res); $content=$row[0]; } echo fetch_row .$times. 次时间:<font color=red>.(fnGetMicroTime()-$begin).</font>秒<br/>; //--------------------------------- $begin=fnGetMicroTime(); for($i=0;$i<$times;$i++) { $res=$dbcon->mydb_query("SELECT log_Content FROM blog WHERE log_ID=1"); $row=$dbcon->mydb_fetch_array($res); $content=$row[log_Content]; } echo fetch_array .$times. 次时间:<font color=red>.(fnGetMicroTime()-$begin).</font>秒<br/>; //--------------------------------- $begin=fnGetMicroTime(); for($i=0;$i<$times;$i++) { $res=$dbcon->mydb_query("SELECT log_Content FROM blog WHERE log_ID=1"); $row=$dbcon->mydb_fetch_object($res); $content=$row->log_Content; } echo fetch_object .$times. 次时间:<font color=red>.(fnGetMicroTime()-$begin).</font>秒<br/>; //--------------------------------- $dbcon->mydb_free_results(); $dbcon->mydb_disconnect(); fnWriteCache(test.txt,$content); echo 直接读文件测试结果:<br/>; //--------------------------------- $begin=fnGetMicroTime(); for($i=0;$i<$times;$i++) { $content = fnGetContent(test.txt); } echo file_get_contents直接读.$times.次时间:<font color=red>.(fnGetMicroTime()-$begin).</font>秒<br/>; //--------------------------------- $begin=fnGetMicroTime(); for($i=0;$i<$times;$i++) { $fname = test.txt; if(file_exists($fname)) { $fp=fopen($fname,"r");//flock($fp,LOCK_EX); $file_data=fread($fp, filesize($fname));//rewind($fp); fclose($fp); } $content = fnGetContent(test.txt); } echo fopen直接读.$times.次时间:<font color=red>.(fnGetMicroTime()-$begin).</font>秒<br/>; 4K大小数据的查询结果: 测试结论: 1、直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间 。 |