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

处理大数据的性能问题
程序使用.NET,MSSQLSERVER2000
create table Procode
{
 id int primary key,
 f1 varchar(20),
 f2 varchar(20),
 f3 varchar(20),
 f4 varchar(20),
 state bit
}
create table codeCollection
{
 id int primary key,
 ProcodeID int ,
 code varchar(200),
foreign key (ProcodeID) references Procode(id) on delete cascade on update cascade  
 }
Procode 表中大约有50-60W条记录,现在把Procode的数据处理插入codeCollection表中
应用程序是把Procode读出来循环处理 select * from Procode where f4 <>1
while(reader.read())
{
  string code;
  for(int i=reader["f2"],i<reader["f3"],i++)
  { 
  string b=reader["f1"] +i +reader["f4"]
  code+="insert into codeCollection(ProcodeID,code) values("+ reader["id"] +"," +b +")"

  }
  --执行code,插入codeCollection表中
}
但是执行效率非常慢,大约需要40min,所以考虑使用dataset貌似还是没有什么效果
现在打算使用mssqlserver2000存储过程,如何编写呢,详细代码 请各位大侠帮忙,小弟不胜感激!

------解决方案--------------------
insert into 数据库名.表名(列名) select (列名) from 数据库名.表名 where 条件
这样不行么
------解决方案--------------------
我也遇到了 类似的问题
------解决方案--------------------
那就先放到一个table中
然后用SqlBulkCopy 存入数据库
------解决方案--------------------
探讨

引用:
insert into 数据库名.表名(列名) select (列名) from 数据库名.表名 where 条件
这样不行么


后面的数据是经过处理后的结果,而不是直接拿出来的,没看到程序有拼接的过程么?

------解决方案--------------------
频繁的操作?
------解决方案--------------------
SqlBulkCopy效率非常高
------解决方案--------------------
SqlBulkCopy 这个不错
------解决方案--------------------
探讨

引用:
insert into 数据库名.表名(列名) select (列名) from 数据库名.表名 where 条件
这样不行么


后面的数据是经过处理后的结果,而不是直接拿出来的,没看到程序有拼接的过程么?