|
程序中定义:主从数据集规则定义为级联删除
现 状:
当执行删除主表记录代码后,用户等了近10分钟(从表记录3000条)
dsbMaster.DataSet.Delete;
原因分析:
执行SQL跟踪后发现:
平台在处理删除从表记录过程中,是逐条记录删除的,严重影响速度
删除主表:
declare @P1 int
set @P1=3
exec sp_prepare @P1 output, N'@P0 nvarchar(4000)', N'declare @A0 nvarchar(12) select @A0= @P0 DELETE FROM TRETAILREPORT with ( RowLock ) WHERE ( BillNo = @A0 )', 1
select @P1
go
exec sp_execute 3, N'SDH081222002'
go
删除从表:
declare @P1 int
set @P1=4
exec sp_prepare @P1 output, N'@P0 nvarchar(4000)', N'declare @A0 nvarchar(32) select @A0= @P0 DELETE FROM TRETAILREPORTDET with ( RowLock ) WHERE ( SerialNo = @A0 )', 1
select @P1
go
exec sp_execute 4, N'6142D70E1A6540E986ABC64122EB2D85'
go
exec sp_execute 4, N'080D720B11794E4AB62AEAF43E46B39F'
go
exec sp_execute 4, N'464791F5EA78440CB9ADF97936379FD8'
go
exec sp_execute 4, N'943C562877AA45C99EAB2FC34D25CEC0'
go
exec sp_execute 4, N'D01D588B6A144F33BFA8372E5F1014C8'
go
...
强烈建议:
当主从表规则为级联删除时,在执行主表删除过程中,变更从表记录删除的实现方法
由:delete 从表 where 从表关键字段 = ?
改为:delete 从表 where 关联字段 = ? |
|