gpt4 book ai didi

sql插入查询性能

转载 作者:太空狗 更新时间:2023-10-30 01:48:37 25 4
gpt4 key购买 nike

我想将 n 条记录插入到一​​个表中。可能有很多并发用户,他们可能会从该表中插入/更新/选择数据。在这样的表中插入 1000 条记录的更好方法是什么:

  1. 将单个 sql 查询发送到具有多个插入的数据库。这节省了服务器到数据库的调用,但(我不确定)锁定表直到插入完成,所有其他对该表的查询将等待。
  2. 将 1000 条记录分成一些 block ,并在多个 sql 查询中发送它们。这让其他查询可以在表上执行,但会花时间在服务器上进行数据库调用。

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

我使用的数据库是 MS SQL,但有趣的是它在 Oracle 等其他数据库中的工作方式。

最佳答案

这完全取决于您使用的是什么 RDBMS

Oracle 中,写入永远不会阻塞读取,这就是您可以一次安全地放置所有数据的原因。但请注意,这会降低性能,因为并发查询需要从 UNDO 表空间中提取数据,这将需要额外的读取。

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

在所有允许并发写入和读取的事务引擎中,引擎需要将旧数据和新数据存储在某个地方,以便它们同时可用。

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

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

这总是需要一些资源(内存或磁盘),如果您的 UPDATE 查询影响大量行,您可能会耗尽这些资源。

关于sql插入查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1199669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com