请教高手 oracle与c#性能处理问题,有谁知道

来源:百度知道 编辑:UC知道 时间:2024/06/17 04:16:27
1、oracle中现在有一个SQL update A set cols = '1' where id in (id1,id2,id3.....)
其中 in 方法里面的参数小于1000。
2、C#代码中 有一个FOR循环 id.rows 不超过1000
for(int = 0;i< id.rows ;i++)
{
update A set cols = '1' where id = id.rows[i]["id"]
}

以上两种方法可以实现相同的功能,请问有谁知道哪种方法处理速度快一些?
第一种方法是,在C#代码直接把in()方法里面的参数集传进去,参数如下
string strId = "id1,id2,id3....";
第二种方法是,在C#代码里面用for循环方法把参数集解析,一次执行一个参数的update方法

跟表里面的数据有关:
update A set cols = '1' where id in (id1,id2,id3.....)
在SQL语句中使用了IN,就意味着你将不能使用数据库中的索引,而不能使用索引的话,当数据量达到上万条级别的话,速度将会非常的慢。
直接update A set cols = '1' where id = id.rows[i]["id"],会使用索引功能,达到上万条级别的话,速度将会得到很大提升。

所以结论是:
1、当数据量达到万条以上级别,建议使用C#中循环处理,这样即使执行1000次,也会比IN一次要快很多(血的教训)。
2、在万条以下的场合,可以考虑写在IN里面。

我想你是考虑到了网络数据传递的性能损失,所以才会想要做一个比较。这个问题还是要结合你的实际情况来看的。

1.一般情况下,服务器和客户端都在本地运行(或局域网内运行)时,可以肯定的说,用设计程序(C#、VB、Delphi等)来处理循环要比数据库(Oracle、SqlServer、Access等)处理要快。因为数据库的运行机理就是为了超大容量的数据处理而设计的,因此针对数据的批处理做了大量的设计优化。所谓有得必有失,数据库的设计并不适合单条数据的循环处理。而程序设计软件则不存在这个问题,由于精细化设计的要求,程序设计软件被要求可以高速处理各种循环机制,以代替人为的重复劳动,因此,从这一点上看,程序设计软件针对复杂数据循环的处理优化,反而要比数据库要多。

2.如果客户端需要通过互联网访问服务器的话,我建议你还是做一个具体的数据测试比较好。因为网络的访问速度确实是一个太不确定的因素。最好是能够大概估计出一个日常使用的循环数量,比如你说的1000,然后用两种方法分别都运行几次,以确定一下到底哪种办法好。

3.补充一下,如果你用数据库实现循环的话,服务器的性能占用会稍大一些;如果用客户端程序实现循环的话,客户端的性能占用会稍大一些。从系统整体运行的角度看,也是用客户端程序实现循环比较好,毕竟服务器只有一个。

什么年代....方标当然用LINQ来做最好啦..