加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Sql插入查询性能

发布时间:2021-03-15 16:23:45 所属栏目:编程 来源:网络整理
导读:我想将n条记录插入到单个表中.可能有许多并发用户,他们可能会从此表中插入/更新/选择数据.在这样的表中插入更好的方法是1000条记录: 将单个SQL查询发送到具有多个插入的数据库.这会将服务器保存到数据库调用,但是(我不确定)会锁定表,直到插入完成并且对该表

我想将n条记录插入到单个表中.可能有许多并发用户,他们可能会从此表中插入/更新/选择数据.在这样的表中插入更好的方法是1000条记录:

>将单个SQL查询发送到具有多个插入的数据库.这会将服务器保存到数据库调用,但是(我不确定)会锁定表,直到插入完成并且对该表的所有其他查询将等待.
>在一些块中划分1000条记录,并在多个SQL查询中发送它们.这允许在表上执行其他查询,但是花费时间在服务器上进行数据库调用.

这取决于某些东西,还是只有一种始终是最佳的方式?
这是否取决于是否使用交易,同时插入数据?
是否有其他更好的方法来执行此类插入?

我使用的数据库是MS SQL,但有趣的是它在Oracle等其他数据库中是如何工作的.

解决方法

这完全取决于您使用的RDBMS.

在Oracle中,写入从不阻止读取,这就是为什么您可以安全地将数据全部放在一起.但请注意,这会降低性能,因为并发查询需要从UNDO表空间中获取需要额外读取的数据.

在SQL Server写入中,对受影响的行/页/表执行阻止读取(取决于锁升级问题),除非将TRANSACTION ISOLATION LEVEL设置为SNAPSHOT.

在允许并发写入和读取的所有事务引擎中,引擎需要在某处存储旧数据和新数据,以便同时可用.

在Oracle中,旧数据被复制到UNDO表空间.

在SQL Server中,它被复制到tempdb中(仅当启用了SNAPSHOT隔离时,否则它只是被锁定).

这总是需要一些资源(内存或磁盘),如果UPDATE查询影响很多行,则可能会耗尽这些资源.

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读