一直以来大家都把一些不经常修改的数据保存为文件来调用,看来还是比较正确的,直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间
这个问题也是最近才想到的,就是到底读文件更快还是读数据库更快,能快多少,天缘也搜索过,没见有网友就这个问题答复过,也可能是太简单的缘故,我们本文还是来实测一下,由于时间关系,VC还没装,天缘先用PHP测试了一下,,下次有时间在C/C++上补充测试到本文来,因为PHP的底层解析应该也是基于C的,所以估计两者环境测试结果差不多,小问题大收获,现在就来看一下测试过程及结果。
测试程序如下:
说明1:由于读数据库语句调用简单的封包函数两次,所以把读文件也改成连续调用两次,数据库记录ID为1就在第一条,并且唯一索引。
说明2:测试两次一次是4K数据,一次是整形数据
复制代码 代码如下:
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 '数据库查询结果:
';
//---------------------------------
$begin=fnGetMicroTime();
for($i=0;$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.' 次时间:'.(fnGetMicroTime()-$begin).'秒
';
//---------------------------------
$begin=fnGetMicroTime();
for($i=0;$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.' 次时间:'.(fnGetMicroTime()-$begin).'秒
';
//---------------------------------
$begin=fnGetMicroTime();
for($i=0;$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.' 次时间:'.(fnGetMicroTime()-$begin).'秒
';
//---------------------------------
$dbcon->mydb_free_results();
$dbcon->mydb_disconnect();
fnWriteCache('test.txt',$content);
echo '直接读文件测试结果:
';
//---------------------------------
$begin=fnGetMicroTime();
for($i=0;$i{
$content = fnGetContent('test.txt');
}
echo 'file_get_contents直接读'.$times.'次时间:'.(fnGetMicroTime()-$begin).'秒
';
//---------------------------------
$begin=fnGetMicroTime();
for($i=0;$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.'次时间:'.(fnGetMicroTime()-$begin).'秒
';
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效率更高,这跟网上的说法似乎相反。
实际上在做这个试验之前,从个人经验判断就有了大概的结果,测试完成后则有种豁然开朗的感觉。假定在程序效率和关键过程相当且不计入缓存等措施的条件下,读写任何类型的数据都没有直接操作文件来的快,不论MSYQL过程如何,最后都要到磁盘上去读这个“文件”(记录存储区等效),所以当然这一切的前提是只读内容,无关任何排序或查找操作。

Windows 11 22H2中的新任务管理器对高级用户来说是一个福音。现在,它通过附加数据提供更好的 UI 体验,以密切关注您正在运行的流程、任务、服务和硬件组件。如果您一直在使用新的任务管理器,那么您可能已经注意到新的效率模式。它是什么?它是否有助于提高 Windows 11 系统的性能?让我们来了解一下!Windows 11 中的效率模式是什么?效率模式是任务管理器中的一

DeepMind的AI智能体,又来卷自己了!注意看,这个名叫BBF的家伙,只用2个小时,就掌握了26款雅达利游戏,效率和人类相当,超越了自己一众前辈。要知道,AI智能体通过强化学习解决问题的效果一直都不错,但最大的问题就在于这种方式效率很低,需要很长时间摸索。图片而BBF带来的突破正是在效率方面。怪不得它的全名可以叫Bigger、Better、Faster。而且它还能只在单卡上完成训练,算力要求也降低许多。BBF由谷歌DeepMind和蒙特利尔大学共同提出,目前数据和代码均已开源。最高可取得人类

Edge等基于Chromium的浏览器会占用很多资源,但您可以在MicrosoftEdge中启用效率模式以提高性能。MicrosoftEdge网络浏览器自其不起眼的开始以来已经走过了漫长的道路。最近,微软为浏览器添加了一种新的效率模式,旨在提高浏览器在PC上的整体性能。效率模式有助于延长电池寿命并减少系统资源使用。例如,使用Chromium构建的浏览器(如GoogleChrome和MicrosoftEdge)因占用RAM和CPU周期而臭名昭著。因此,为了

标题:Python让生活更便捷:掌握这门语言,提升工作效率和生活品质Python作为一种强大而简单易学的编程语言,在当今的数字化时代越来越受到人们的青睐。不仅仅用于编写程序和进行数据分析,Python还可以在我们的日常生活中发挥巨大的作用。掌握这门语言,不仅能提升工作效率,还能提高生活品质。本文将通过具体的代码示例,展示Python在生活中的广泛应用,帮助读

Scrapy是一款Python编写的强大的网络爬虫框架,它可以帮助用户从互联网上快速、高效地抓取所需的信息。然而,在使用Scrapy进行爬取的过程中,往往会遇到一些问题,例如抓取失败、数据不完整或爬取速度慢等情况,这些问题都会影响到爬虫的效率和稳定性。因此,本文将探讨Scrapy如何提高爬取稳定性和抓取效率。设置请求头和User-Agent在进行网络爬取时,

掌握sessionStorage的作用,提升前端开发效率,需要具体代码示例随着互联网的快速发展,前端开发领域也日新月异。在进行前端开发时,我们经常需要处理大量的数据,并将其存储在浏览器中以便后续使用。而sessionStorage就是一种非常重要的前端开发工具,可以为我们提供临时的本地存储解决方案,提高开发效率。本文将介绍sessionStorage的作用,

随着互联网的快速发展,数据库的重要性日益凸显。作为一名Java开发者,我们经常会涉及到数据库操作,数据库事务处理的效率直接关系到整个系统的性能和稳定性。本文将介绍一些Java开发中常用的优化数据库事务处理效率的技巧,帮助开发者提高系统的性能和响应速度。批量插入/更新操作通常情况下,一次向数据库中插入或更新单条记录的效率远低于批量操作。因此,在进行批量插入/更

在任何版本的Windows上,您都会发现少数进程在后台运行,并且即使在空闲状态下也会主动使用系统资源。我们可以使用任务管理器监控活动进程或程序,如果进程减慢系统速度,我们可以使用“结束任务”功能。任务管理器用于性能控制,它可以告诉您后台进程占用了多少资源。这些系统资源包括CPU、RAM、GPU甚至网络带宽。如果应用程序在空闲状态下积极使用系统资源,您可以使用任务管理器的“结束任务”功能来关闭该进程。在Windows11Build22557中,微软正试图实现一项功能,允许用户限制“基于每个应用


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Dreamweaver CS6
Visual web development tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool
