我想删除一组基于id传递的记录。
实施例: 我有一个列表中的id,它正在迭代添加参数以删除查询并每次执行删除语句。
DateTime.MaxValue.ToFileTimeUtc() = 2650467743999999999 = 0x24C85A5ED1C04000
我想将逗号分隔的字符串作为逗号分隔,然后将查询删除为IN语句。
for(i=0;i<n;i++)
{
Delete from tbl_abc where id=i;
}
如果我在删除查询中使用IN而没有迭代列表并将Id作为参数传递,那么性能提升是什么?
答案 0 :(得分:2)
假设我们在tbl_abc中有100万行,我们想要删除10,000行。如果执行10,000 delete语句,这意味着您在执行下一个语句之前,将10,000次往返数据库并执行10,000语句并等待每个语句的结果。此外,如果在未编制索引的条件中使用列,则会导致表扫描10,000次,这是一个非常慢的操作。
另一方面,如果我们发送一个删除语句。我们将一次扫描表,执行原子数据库操作,这将使我们免于一些并发删除问题,并且只有一个数据库往返。