【发布时间】:2019-07-22 04:01:42
【问题描述】:
PHP:
$dbconn = pg_connect("host=127.0.0.1 dbname=test user=test password=test");
$start = microtime(true);
for($i=1;$i<=5000;$i++) {
pg_query("insert into testtb(uid,sid) values($i,$i)");
}
echo ( (microtime(true) - $start) *1000).' ms';
// result: 15504.348993301 ms
PSQL 外壳:
begin for r in 1..5000 loop
insert into testtb (uid,sid) values(r,r);
end loop; end; $$;
// result: 43 ms
testtb 很简单,只有两列 sid 和 uid,都被索引了。 PHP 和 PG 在同一台服务器上。
从测试中我们可以看到,对于 5000 条记录的插入,Postgres 的速度非常快。但是当使用 PHP 时,速度显着下降。那么我们怎样才能提高 PHP+PG 的速度呢?
编辑:请注意结果:PHP - 15504 ms, psql shell - 43 ms
【问题讨论】:
-
为什么要执行 5000 个单独的插入而不是 5000 个值元组的插入?是否设置了任何索引?您是否排除了网络问题?
-
如果您正在填充数据库,您是否尝试使用 COPY?它针对加载大量行进行了优化。
-
@NicoHaase 用于测试并与 shell 进行比较。
-
@abestrad 不,这不是真实情况,而是测试。请注意,从 psql shell 插入非常快,所以问题不应该来自 db 本身。
-
是新表吗?您是否尝试在插入所有行后创建索引?在现有数据上创建索引比在插入每一行时更新它更快。
标签: php postgresql