PHP中读写文件与读写数据库的效率比较
这个问题直到最近,实际上是读取或读取数据库文件的速度越来越快,速度快得多,天元也找到了,有没有朋友对这个问题的回答,可能是过于简单,因为我们仍然来衡量的,因为时间关系,VC是没有安装,天元的第一个PHP测试,在C / C++补充测试下一次,因为基本的解析PHP应该基于C,所以两个估计环境检测结果的小问题,大丰收,看看现在的测试过程和结果。测试程序如下:
注释1:因为读取数据库语句两次调用一个简单的包函数,读取文件也会更改为两个连续调用。数据库记录ID为1,这是第一个也是惟一的索引。
描述2:两次测试是4K数据,一次是塑料数据。
复制代码代码如下所示:
(0)set_time_limit;
功能fnget($文件名)
{
$content = file_get_contents($文件名);
返回$内容;
}
功能fngetcontent($文件名)
{
$content = fnget($文件名);
返回$内容;
}
100000美元;
回声数据库查询结果;
/ / ---------------------------------
开始fngetmicrotime美元=();
($ i = 0;$ i < $乘以;$ + +)
{
美元dbcon -> mydb_query RES = $(选择log_content从博客里log_id = 1);
$行= dbcon美元-> mydb_fetch_row(合物);
$ = $行{ 0 };
}
echo'fetch_row'。$倍。'times:'。(fngetmicrotime()$开始)。证交会;
/ / ---------------------------------
开始fngetmicrotime美元=();
($ i = 0;$ i < $乘以;$ + +)
{
美元dbcon -> mydb_query RES = $(选择log_content从博客里log_id = 1);
$行= dbcon美元-> mydb_fetch_array(合物);
$content = $行{ 'log_content};
}
echo'fetch_array'。$倍。'times:'。(fngetmicrotime()$开始)。证交会;
/ / ---------------------------------
开始fngetmicrotime美元=();
($ i = 0;$ i < $乘以;$ + +)
{
美元dbcon -> mydb_query RES = $(选择log_content从博客里log_id = 1);
$行= dbcon美元-> mydb_fetch_object(合物);
$content = $行> log_content;
}
echo'fetch_object'。$倍。'times:'。(fngetmicrotime()$开始)。证交会;
/ / ---------------------------------
dbcon美元-> mydb_free_results();
dbcon美元-> mydb_disconnect();
fnwritecache(测试。txt,$content);
对测试结果的直接解读;
/ / ---------------------------------
开始fngetmicrotime美元=();
($ i = 0;$ i < $乘以;$ + +)
{
$content = fngetcontent(测试.txt);
}
echo'file_get_contents读'。$倍。'times直接:。(fngetmicrotime()$开始)。证交会;
/ / ---------------------------------
开始fngetmicrotime美元=();
($ i = 0;$ i < $乘以;$ + +)
{
按美元=测试.txt;
如果(file_exists($名))
{
$ FP = fopen($名,R); / /羊群($ FP,lock_ex);
file_data美元= fread($ FP,文件大小($名)); / /倒带($ FP);
Fclose($ FP);
}
$content = fngetcontent(测试.txt);
}
echo'fopen读'。$倍。'times直接:。(fngetmicrotime()$开始)。证交会;
4K尺寸数据查询结果:
fetch_row 100000时间:16.737720012665秒
fetch_array 100000时间:16.661195993423秒
fetch_object 100000时间:16.775065898895秒
直接阅读测试结果:
file_get_contents读100000次直接:5.4631857872009秒
你读了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秒
你读了100000遍:11.542816877365秒
试验结论:
1。文件的直接读取效率比数据库查询要好,连接和断开的时间还没有统计。
2,一旦更多的阅读,直接读取文件的优势将更为明显(与文件存储的连续性和簇的大小关系不大,提高文件的读取时间),结果是相反的天元,对于大文件的读取MySQL可以在一定的操作(近30%的增长,如果两次)只是一个简单的分配应偏小的差异。
三.只有在不经过测试的情况下才能编写文件和插入文件,而且数据库效率更差。
4、非常小的如果你不需要使用配置文件到数据库的特性,更适合单独的文件访问,而不需要创建数据表或记录大文件,如图片、音乐等。文件存储更方便,只有路径或缩略图索引信息进入数据库更为合理。
5,如果只有一个文件读取PHP,file_get_contents比你和Fclose更有效,它不包括约3秒的时间少这个函数存在性的判断。
6、fetch_row和fetch_object应该从fetch_array。我还没有读过PHP的源代码。它可以解释fetch_array单独执行的效率,这是相反的网上声明。
事实上,做这项实验之前,有可能从个人的经验判断的结果,与试验测试完成后一个明显的感觉,对程序效率的假设和关键过程,不包括在缓存和其他措施的读写任何数据类型的情况下是不操作文件直接来的快,不管如何msyql的过程,我们要读取的文件到磁盘(存储记录等),当然这是只读内容的前提下。不管任何种类或搜索操作。