C# 以简洁的方式删除,或以其他高效快捷的方式删除

C# 以简洁的方式删除,或以其他高效快捷的方式删除,c#,performance,dapper,cascading-deletes,C#,Performance,Dapper,Cascading Deletes,我想从数据库中删除表之间有关系的数据,我应该用dapper从父表和子表中查询删除数据。 这很慢。 我在45秒内删除了很多数据(数百万条记录),但在2分钟内删除了几行 如何以性能和速度执行此操作 var deletequery = @"delete from DailyCodeDetail " + @" from DailyCodeDetail dcd inner join DailyCode" + @" dc on

我想从数据库中删除表之间有关系的数据,我应该用dapper从父表和子表中查询删除数据。 这很慢。 我在45秒内删除了很多数据(数百万条记录),但在2分钟内删除了几行 如何以性能和速度执行此操作

 var deletequery = @"delete from DailyCodeDetail " +
                   @" from DailyCodeDetail  dcd inner join DailyCode" +
                   @" dc on dcd.DailyCodeId = dc.id inner join DailyResult  d on d.id=dc.DailyResultId " +
                    @"where d.PersonId =@Personid and dcd.DateAttendance >= @sDate and dcd.DateAttendance <= @eDate";
connection.Execute(deletequery, new { Personid = personId, sDate = sdate, eDate = edate }, commandTimeout: 1000);
var deletequery=@“从DailyCodeDetail中删除”+
@“来自DailyCodeDetail dcd内部联接DailyCode”+
@“dcd.DailyCodeId=dc.id内部联接DailyResult d on d.id=dc.DailyResultId上的dc”+
@“其中d.PersonId=@PersonId和dcd.DateAttention>=@sDate和dcd.DateAttentiondapper(或任何其他客户端技术)的性能只取决于查询的数量和返回的行数。您的查询很少执行(但做了大量工作)。Dapper的性能在这里并不重要。Dapper所做的只是将查询中继到SQL Server

您现在应该考虑优化查询。这不能作为此问题的一部分来完成,因为我们几乎没有关于参与的表和数据的信息。可能只是因为查询需要做那么多DML工作,所以根本无法加快查询速度

您现在可能应该研究一下“如何在SQL Server中进行批量删除”。这将对您有所帮助。

dapper(或任何其他客户端技术)的性能只与查询数量和返回的行数有关。您的查询很少执行(但做了大量工作)。Dapper的性能在这里并不重要。Dapper所做的只是将查询中继到SQL Server

您现在应该考虑优化查询。这不能作为此问题的一部分来完成,因为我们几乎没有关于参与的表和数据的信息。可能只是因为查询需要做那么多DML工作,所以根本无法加快查询速度


您现在可能应该研究一下“如何在SQL Server中大容量删除”。这将对您有所帮助。

where子句中使用的列上的索引如何?设置级联删除如何?where子句中使用的列上的索引如何?设置级联删除如何?