postgresql批量插入数据脚本_sql-PostgreSQL中的批量/批量更新/更新

在Django项目中,作者遇到批量更新数据库的需求,希望通过类似批量插入的方式提高效率。了解到小规模查询效率较低,批量处理更优。文章讨论了如何在PostgreSQL 8.4中进行批量更新,提出可能的解决方案,并分享了性能测试结果,显示在单个connection.execute()中执行大量操作能显著提升速度。尽管考虑了存储过程和批处理“插入或更新”,但重点在于优化批处理更新和插入的策略。
摘要由CSDN通过智能技术生成

我正在编写Django-ORM附约,尝试对模型进行缓存并将模型保存推迟到事务结束。 一切都快完成了,但是我遇到了SQL语法中的意外困难。

我不是DBA的专家,但据我了解,对于许多小型查询,数据库并不能真正有效地工作。 很少有更大的查询会更好。 例如,最好使用大批量插入(例如一次100行)而不是100个单线。

现在,据我所知,SQL并没有提供任何语句来对表执行批处理更新。 这个术语似乎令人困惑,因此,我将解释我的意思。 我有一个任意数据数组,每个条目描述一个表中的一行。 我想更新表中的某些行,每行都使用数组中相应条目中的数据。 这个想法与批处理插入非常相似。

例如:我的表可以有两列"id"和"some_col"。现在描述批量更新数据的数组由三个条目(1, 'first updated')、(2, 'second updated')和(3, 'third updated')组成。在更新之前,该表包含以下行:(1, 'first')、(2, 'second')、(3, 'third')。

我碰到了这篇文章:

为什么批量插入/更新速度更快? 批量更新如何工作?

这似乎可以满足我的要求,但是我无法真正弄清楚语法的结尾。

我也可以删除所有需要更新的行,然后使用批处理插入将它们重新插入,但是我很难相信这样做实际上会更好。

我使用PostgreSQL 8.4,因此这里也可以使用一些存储过程。 但是,当我计划最终开源该项目时,最欢迎在其他RDBMS上使用任何可移植的想法或方法来做同一件事。

后续问题:如何执行批处理“插入或更新” /“更新”语句?

检测结果

我执行了100次乘以10次插入操作,这些操作分布在4个不同的表上(因此总共进行1000次插入)。 我在带有PostgreSQL 8.4后端的Django 1.3上进行了测试。

结果如下:

通过Django ORM完成的所有操作-每经过约2.45秒,

相同的操作,但没有Django ORM进行-每次传递〜1.48秒,

仅插入操作,而无需查询数据库约0.72秒的序列值,

仅插入操作,以10个块(总共100个块)〜0.19秒执行,

仅执行插入操作,一个大的执行块约为0.13秒。

仅插入操作,每个块约250条语句,约0.12秒。

结论:在单个connection.execute()中执行尽可能多的操作。 Django本身引入了大量的开销。

免责声明:除了默认的主键索引之外,我没有引入任何索引,因此插入操作可能因此而运行得更快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值