PHP中读写文件与数据库的性能对比实测

小林子
小林子
发布时间:2026-10-14| 4人浏览过
原创

在日常开发中,处理小量配置或简单索引时,究竟是存入数据库还是单独的文件更优?本文基于 PHP 环境进行实测对比。结果表明,在不涉及复杂查询的场景下,直接操作本地文件的 I/O 效率显著优于数据库连接与查询开销。

实验目标与准备条件

为了量化不同读取方式的耗时差异,测试程序将执行以下两个核心维度:

  • 固定文本数据:约 4KB 的内容块,模拟普通文章片段或配置信息。
  • 整数 ID 寻址:仅查询记录主键,模拟轻量级的元数据读取。

为保证公平性,针对数据库调用封装了两次函数调用的动作,读取文件时也保持了同等的逻辑结构。代码逻辑主要包含以下几个测试分支:

  1. 使用 fetch_row 获取结果数组。
  2. 使用 fetch_array 获取结果数组。
  3. 使用 fetch_object 获取对象属性。
  4. 使用 file_get_contents 一次性读取文件内容。
  5. 使用 fopen / fread / fclose 标准流读取方式。

真实操作顺序与结果

第1步:执行数据库查询基准测试

首先建立 MySQL 连接,对同一记录(ID=1)连续执行 100,000 次查询。分别统计三种获取行数据的函数的平均消耗时间。

测试结果显示,在读取 4K 大小文本时,三种方式的耗时均接近 16.7 秒。当仅读取整形 ID 时,耗时下降至约 12.8 秒左右。

第2步:执行 file_get_contents 文件读取测试

将上一步从数据库取出的内容保存为本地文本,随后在相同循环次数下使用 file_get_contents 直接加载该文件。

结果显示,读取 4K 文本耗时约 5.46 秒,读取整型数据耗时约 5.66 秒。这表明单纯读取物理文件的速度极快且稳定。

第3步:执行 fopen/fread 文件读取测试

改用标准的文件流指针方式(检查存在性 → 打开 → 读取指定大小 → 关闭)。此过程由于增加了多次函数交互和系统调用:

读取 4K 文本耗时约 11.46 秒,读取整型耗时约 11.54 秒。虽然略低于数据库查询速度,但远不及 file_get_contents 高效。

第4步:综合对比观察

方法分类 4K文本 (10万次) 整形ID (10万次)
Fetch_row 16.73s 12.81s
Fetch_array 16.66s 12.66s
Fetch_object 16.77s 12.98s
file_get_contents 5.46s 5.66s
fopen/fread 11.46s 11.54s

分析与建议

根据上述数据和操作反馈,可得出以下关于读写效率的结论:

1. 磁盘操作的终极瓶颈
无论采用何种存储介质,任何持久化方案最终都将转化为硬盘的物理 I/O。只要不涉及排序、模糊匹配等计算,直接读取文件绕过了 SQL 解析、网络通信及数据库引擎内部状态机管理的开销,因此速度优势明显。

2. 函数选择的必要性
如果确定只读文件,务必优先使用 file_get_contents。它是一次性读取底层缓冲区,相比需手动管理句柄的 fopen/fread 组合,在处理常规文件大小时代价几乎可以忽略不计。

3. 选型建议
- 适合存为独立文件的情况:不需要做联合查询(Join)、数据校验强依赖数据库特性的配置项、或者超大二进制资源(图片/音视频)的路径映射表本身。

- 适合存入数据库的情况:需要高并发写入、多表关联检索、全文搜索能力、或者对结构化数据一致性有严格要求的业务。

以上就是PHP中读写文件与数据库的效率比较的详细内容,更多关于PHP性能优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。