2 回答
TA贡献2039条经验 获得超7个赞
如果您可以选择不使用 php 进行此操作,请尝试将此电子表格导出为 CSV 并使用COPY
. 不会超过几秒钟。
如果您的数据库安装在本地,您只需在您选择的客户端中执行 COPY,例如pgAdmin
. 检查此answer
以获取更多信息。
COPY your_table FROM '/home/user/file.csv' DELIMITER ',' CSV HEADER;
请记住,postgres
系统中的用户必须具有访问 CSV 文件的必要权限。检查如何在您的操作系统中执行此操作,例如chown
在 Linux 中。
如果您的数据库安装在远程服务器中,您必须使用STDIN
viaCOPY
psql
$ cat file.csv | psql your_db -c "COPY your_table FROM STDIN;"
TA贡献1785条经验 获得超4个赞
首先,尝试找出问题的根源是什么,是因为对文件的操作速度慢还是同时执行的SQL查询太多?
请记住,在循环中运行查询总是会带来性能问题。也许您可以通过在处理文件之前询问所需的数据来避免这种情况?您可能无法定义在该步骤中需要哪些数据,但获取比您需要的更多的数据可能仍然比逐个进行单独查询要快。另外,我想鼓励您限制INSERT
或UPDATE
查询。它们通常比SELECT
一个慢。尝试为数据库写入操作收集数据并在循环后运行一次。
对于 CSV 操作,我更喜欢基本的 php 方法fgetcsv()
,而str_getcsv()
不是单独的库,只要文件没有过于复杂。如果您热衷于检查一些替代方案以PhpSpreadsheet
查看 box.com 的Spout,它看起来很有希望,但我从未使用过。
我相信您可以通过使用PHP 生成器来提高性能,每次您必须读取文件内容时,它们都是完美的。这里有更多链接:
https://www.sitepoint.com/memory-performance-boosts-with-generators-and-nikiciter/
https://riptutorial.com/php/example/5441/reading-a-large-file-with-a-generator/
- 2 回答
- 0 关注
- 110 浏览
添加回答
举报