我想根据传递的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/