postgresql数据库插入需要太长时间

时间:2014-01-30 13:01:10

标签: sql postgresql

这慢吗? 我有一个有4列的表 ID姓氏教练城

我有一个添加数据按钮,它添加了300行,每行包含每列中的数据,因此总共有1200条记录。

物理上添加数据只需要4分钟(这意味着从我点击按钮到显示消息框完成时)。

我在ADSL2 +在澳大利亚,在此之后进行了速度测试并获得了 28ms ping 14.12Mbps下载 0.49Mbps上传

我知道澳大利亚互联网是一个笑话,但这似乎真的很慢!

这仅仅是因为我的网上传速度?

3 个答案:

答案 0 :(得分:3)

在单个事务中执行单个插入是您将获得的最差性能。你每插入行至少会产生一次网络往返行程,而300行会产生重大影响 - 仅仅是延迟花费了大约10秒,而如果你只进行了一次往返每个插入,如果你的28ms延迟适用于更大的数据包。那也不考虑COMMIT s上的时间。

如果您的数据库驱动程序发送了单独的BEGINCOMMIT命令,那么仅在网络延迟上花费的时间是20,{300} BEGINCOMMIT

在单个事务中以块的形式执行多值插入。或者更好的是,使用COPY流式传输数据。这样,您可以最大限度地减少往返次数,从而减少网络延迟的影响,并降低提交成本的影响。

有关更多信息和有用的链接,请参阅How to speed up insertion performance in PostgreSQL

你应该可以在几百毫秒内完成这样的批处理。

答案 1 :(得分:1)

通过减少正在使用的插入语句的数量,您可能会受益最多,因为当您减少请求和响应的数量时,ping时间变得不那么相关。

请参阅此处的示例:http://www.postgresql.org/docs/9.0/static/dml-insert.html

答案 2 :(得分:1)

您插入的表上可能存在索引。请记住,执行插入操作时需要更新每个索引。

您可以尝试:

select * from pg_indexes where tablename = 'your_table';

列出所有索引。

此外,每个刀片的打开/关闭连接都会降低性能。您是否考虑过单插入SQL查询?

INSERT INTO "table" ( col1, col2, col3)
  VALUES ( 1, 2, 3 ) , ( 3, 4, 5 ) , ( 6, 7, 8 );