sql - ADO.NET 中的批量删除

标签 sql ado.net

我想根据传递的id删除一组记录。

示例: 我的列表中有 id,它正在迭代添加参数以删除查询并每次执行删除语句。

for(i=0;i<n;i++)
{
Delete from tbl_abc where id=i;
}

我想制作一个以逗号分隔的 id 字符串,并将删除查询传递给 IN 语句。

Delete from tbl_abc where id in (0,1,2,....n);

如果我在删除查询中使用 IN 而不迭代列表并将 Id 作为参数传递,性能会有何提升?

最佳答案

假设 tbl_abc 中有 100 万行,我们想要删除 10,000 行。如果执行 10,000 条删除语句,这意味着您对数据库进行 10,000 次往返,执行 10,000 条语句,并在执行下一条语句之前等待每条语句的结果。另外,如果在where条件中使用没有索引的列,这将导致表扫描10,000次,这是一个非常慢的操作。

另一方面,如果我们发送一条删除语句。我们将扫描一次表,执行原子数据库操作,这将使我们避免一些并发删除问题,并且只有一次数据库往返。

关于sql - ADO.NET 中的批量删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30315184/

相关文章:

SQL 语句 - 排除某些数据

php - 这个 SQL 查询有什么问题? (MySQL错误)

.net - 来自带有事务的 dotnet 的 SQL 脚本

c# - 如何用具有相同主键的本地数据库表更新远程表?

c# - asp.net Ado 存储过程字段

.net - 无法使用ADO.NET Entity Framework 执行存储过程

java - 在 sql 查询中添加换行符 (\n) 是否安全?

sql - 在 SQL 数据库中复制/不必要的数据

android - Android Room 数据库中的@Query Update 不更新主键字段

c# - 在用户控件之间共享数据