phpMyAdmin 导出 csv 性能为什么感觉强于 PHP 手写导出 csv

144 天前
 zero3412
phpMyAdmin 导出小于 100M 左右的 CSV 时,感觉轻轻松松,点击之后基本就能生成文件并下载;
而使用如框架 thinkphp 导出相同数据时,就必须要使用分页或其它方法,否者会引起超时或内存不足等乱七八糟的问题;
如果使用原生 PHP 会比框架要好些,但依然没有 phpMyAdmin 那么丝滑。


GPT 的回复
在比较 phpMyAdmin 导出 CSV 的性能与用 PHP 手写导出 CSV 时,以下几点可能解释了为什么 phpMyAdmin 的性能更好:

优化和效率:
phpMyAdmin 是一个成熟的工具,专门设计用于与 MySQL 数据库交互。它在处理大数据集时进行了很多优化,使得导出操作更高效。
手写的 PHP 脚本可能没有进行类似的优化,尤其是如果没有充分考虑内存管理和数据库查询的效率。

使用 LOAD DATA:
在导出 CSV 文件时,phpMyAdmin 可以使用 MySQL 的 LOAD DATA 功能,这比 PHP 手写代码更高效

数据库查询优化:
phpMyAdmin 在执行查询时可能使用了一些最佳实践,例如分页查询以避免内存溢出。
手写的 PHP 脚本如果没有适当的查询优化,可能会导致性能瓶颈,尤其是在处理大数据集时。

内存管理:
phpMyAdmin 可能使用了流式处理( streaming )技术,即逐行读取数据并写入 CSV 文件,从而降低内存占用。
如果手写的 PHP 脚本一次性读取大量数据并存储在内存中,再进行写入操作,内存消耗会非常高,导致性能下降。

文件处理:
phpMyAdmin 可能使用了更高效的文件写入方式,例如使用内置的函数进行批量写入。
手写的 PHP 脚本如果使用的是逐行写入且没有进行缓冲操作,会导致 I/O 操作频繁,从而影响性能。

错误处理和重试机制:
phpMyAdmin 内置了错误处理和重试机制,可以在出现错误时有效地处理和恢复,从而保证导出过程的顺利进行。
手写的 PHP 脚本如果没有完善的错误处理机制,在出现错误时可能会中断导出过程,导致性能不稳定。
缓存机制:

phpMyAdmin 可能利用了缓存机制来提高数据读取和写入的效率。
手写的 PHP 脚本如果没有使用缓存,数据的读写效率可能会较低。
总结来说,phpMyAdmin 在导出 CSV 的过程中,利用了很多性能优化技术和最佳实践,使得其导出性能优于一般的手写 PHP 脚本。如果希望提高手写 PHP 脚本的导出性能,可以参考 phpMyAdmin 的一些优化策略和技术。
2227 次点击
所在节点    PHP
4 条回复
niubilewodev
144 天前
流式处理
没有其他黑魔法。
brader
144 天前
> 而使用如框架 thinkphp 导出相同数据时,就必须要使用分页或其它方法,否者会引起超时或内存不足等乱七八糟的问题;
如果使用原生 PHP 会比框架要好些,但依然没有 phpMyAdmin 那么丝滑。

当你说这个时,我就盲猜你的导出代码没有使用流式输出的实现。
来,贴段你的导出代码来评价
ipwx
144 天前
Transfer-Encoding: chunked
zero3412
144 天前
@brader 哈哈哈,确实没用到这个流式输出

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1061394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX