日期:2014-05-18  浏览次数:20472 次

SQL删除多条数据两种方法性能比较
今天看到一段代码,是用代码生成器生成的,代码如下:
                public   void   Delete(List <int>   l)
                {
                        foreach   (int   ISBN   in   l)
                                dal.Delete(ISBN);   //逐个删除数据
                }

这样删除数据会不会造成性能的损失?
因为这样每删除一条数据都要经过编译器编译,增加额外的系统开销。

相比较而言:
"delete   from   table   where   id   in( "+id[n]+ ") ";这种方法效率应该比前一种有大幅度的提升。

本人入行不久,对代码生成器中的这段代码有所疑虑,感觉大批量的数据的话用代码生成器中的方法是不可行的,本人个人看法,不知道是否正确?

------解决方案--------------------
没错

一条一条删除,那么每删除一条都要一次数据连接,这个当然不可取。

现在有很多代码生成器的东西,因为面向对象嘛,但是有些应该适可而止,就比如这个,非常的不建议
------解决方案--------------------
ID分类,取某值col最小,其他删除(意即按ID删除多余数据)

delete from tb where id not in (select min(col) from tb group by id)