在我们的一个(C#)应用程序中,我们正在插入/更新一个大图(100个插入和更新).这包含在一个事务中,因为我需要在发生错误时回滚整个事情.我们正在使用Dapper来执行SQL语句.
不幸的是,整个操作目前需要2至8秒.这是2到8秒,我们数据库中的核心表被锁定,导致其他应用程序挂起或遭受锁定.
我确定其中一个操作,插入到包含超过1.2亿条记录的表中,大部分时间都在占用,但我不确定如何优化它.
粗略地说,该表格设置如下:
table A (
id int primary_key,
name nvarchar
)
table B (
id int primary_key,
a_id int foreign_key, # has an index
name nvarchar
)
Run Code Online (Sandbox Code Playgroud)
在插入数据时A我还需要插入相应的数据B.因此,我scope_identity()用来获取记录的id并在插入记录时使用它B.
伪观看起来如下:
# open transaction
# perform other table inserts
#
# this is one of the slowest operations
for item in list_a
id_a = exec "insert into A (name) values (" + item.name + "); select scope_identity() as int"
for …Run Code Online (Sandbox Code Playgroud)