当前位置: 首页 > 知识库问答 >
问题:

postgresql数据库插入时间过长

孟健
2023-03-14

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

我有一个添加数据按钮,它添加了300行,每列都包含数据,所以总共有1200条记录。

实际添加数据只需4分钟多(这意味着从我按下按钮到显示消息框完成)。

我在澳大利亚的ADSL2上,速度测试刚刚完成,下载速度为28ms ping 14.12Mbps,上传速度为0.49Mbps

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

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

共有3个答案

蒋星驰
2023-03-14

通过减少使用的insert语句的数量,您可能会受益最大,因为当您减少请求和响应的数量时,ping时间变得不那么重要。

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

许俊雅
2023-03-14

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

你可以试试:

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 );
杨阳飇
2023-03-14

在单个事务中执行单个插入是您将获得的最糟糕的性能。每插入一行至少会发生一次网络往返,在300行时,这将是重要的——仅在延迟上就花费了大约10秒,这是如果每插入只进行一次往返,并且如果您的28毫秒延迟适用于较大的数据包。这也没有考虑COMMIT的时间。

如果您的数据库驱动程序分别发送BEGINCOMMIT命令,那么仅网络延迟就需要花费20秒,即300BEGINs和300COMMITs。

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

有关更多信息和有用的链接,请参见如何在PostgreSQL中提高插入性能。

您应该能够在几百毫秒内完成这样的批处理。

 类似资料:
  • 问题内容: 我希望能够将bigints数组写入要用于Go历史记录的表中。不幸的是,我不能,当我这样做时`sql: converting Exec argument 这是我要插入的表的结构: 问题答案: 使用自定义类型实现database / sql / driver.Valuer:

  • 我正在使用Spring Boot 2和Liquibase(核心3.6.2),我的DB是PostgreSQL。我在db.changelog-master.xml中通过这个变更集创建表: 用于从csv文件向该表插入值的下一个变更集: 如果我在列id中指定类型UUID而不是字符串,liquibase将告诉我: 测试内容。csv文件: 当我运行应用程序时,liquibase创建了表,当它尝试插入值时,我收

  • 我的代码有一个错误, 我花了一些时间寻找不同的解决办法,但没有效果。 这是我的代码, 这是我的eclipse控制台的日志。 null 感谢任何帮助。谢谢!

  • 问题内容: 我们希望将当前日期时间放入数据库列中。 我们有一个Web场,Web服务器上的时间可以变化,因此我们需要在数据库服务器上使用datetime。 我们有一个带有datetime列的数据库。此列的默认日期时间为当前时间。 当我们使用不包含datetime列的SQL语句插入数据时,这种方法可以很好地工作。 从实体框架: 如果我们将datetime定义为,则datetime设置为低日期,并将低日

  • 问题内容: 从Actor中读取的文件:Zac Efron 传记:他出生于加利福尼亚州的圣路易斯·奥比斯波,并在阿罗约·格兰德附近长大。在几集《夏姆兰》(2004)的客串中,他以女孩疯狂的卡梅隆·贝尔的身份参加常规演出。埃夫隆还出演过许多飞行员,例如卡尔·兰克(Carl Laemke)的《大世界》(2003)(电视)和三重播放(2004)(TV)。 More_Bio:Efron于2006年6月毕业于

  • 利用INSERT语句将数据插入表中 数据插入 用来插入(添加)行到数据库。 插入完整的行 插入行的一部分 插入某些查询结果 插入完整的行 指定表名和被插入到新行中的值 编写依赖与特定列次序的SQL语句,这样做有时会出错,但编写方便。 mysql> INSERT INTO Customers -> VALUES('1000000006', -> 'Toy Land', ->