Kam*_*rey 6 sql database performance insert
我想将n条记录插入到一个表中.可能有许多并发用户,他们可能会插入/更新/选择此表中的数据.在这样的表中插入更好的方法是说1000条记录:
这取决于某些事情,还是有一种始终是最佳的方式?这是否取决于是否使用交易,同时插入数据?还有其他更好的方法来执行此类插入吗?
我使用的数据库是MS SQL,但它在甲骨文等其他数据库中的工作方式很有意思.
这完全取决于RDBMS您使用的是什么.
在Oracle,写入永远不会阻止读取,这就是为什么您可以安全地将数据全部放在一起.但请注意,这会降低性能,因为并发查询需要从UNDO表空间中获取需要额外读取的数据.
在SQL Server写入时,阻止读取受影响的行/页/表(取决于锁升级问题),除非您设置TRANSACTION ISOLATION LEVEL为SNAPSHOT.
在允许并发写入和读取的所有事务引擎中,引擎需要在某处存储旧数据和新数据,以便同时可用.
在Oracle,旧数据被复制到UNDO表空间.
在SQL Server,它被复制到tempdb(仅当SNAPSHOT启用隔离时,否则它只是被锁定).
这总是需要一些资源(内存或磁盘),如果UPDATE查询影响很多行,则可能会耗尽这些资源.