极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒

    .NET程序中可以通过ODP调用特性,对Oracle数据库进行操作,今天来讲一下数据批量插入的功能,所用技术不高不深,相信很多朋友都接触过,小弟班门弄斧了,呵呵。这篇文章是上篇文章的续集,因为上一次试验的征集结果没有突破4秒的方法,所以这次继续挑战与挖掘新方法,虽然是Oracle,但仍具有一定收藏意义。

    上一次文章中提及的试验:

    极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    http://kb.cnblogs.com/page/73491/

    这个试验是针对SQL SERVER数据库的,宿主环境也是.NET,有兴趣的朋友可以将这两个试验对比一下,为日后工作批量导数提供支持。

    另外,一些朋友对上次试验环境有些异议,认为应该对数据库和服务器做优化或设置,以体现试验最终的时间结果。这个固然会影响试验的时间结果,但考虑到在试验环境中,对数据库优化的标准与优化程度不便统一与定量,试验结果也不易说明其影响源,所以这次试验依然以标准数据库建库后的配置为主,试验所在服务器硬件环境与上次试验保持一致。实验目的在于挖掘、对比宿主程序中的数据批量操作方法。

    有新方法提升性能时间指标的朋友,欢迎互相切磋,互相提高,嘴上功夫就免了。。。

    好了正文开始。

    ● 普通肉垫式

    什么叫批量插入呢,就是一次性插入一批数据,我们可以把这批数据理解为一个大的数组,而这些全部只通过一个SQL来实现,而在传统方式下,需要调用很多次的SQL才可以完成,这就是著名的“数组绑定”的功能。我们先来看一下传统方式下,插入多行记录的操作方式:

代码
//设置一个数据库的连接串, 

string connectStr = "User Id=scott;Password=tiger;Data Source=";

OracleConnection conn
= new OracleConnection(connectStr);

OracleCommand command
= new OracleCommand();

command.Connection
= conn;

conn.Open();

Stopwatch sw
= new Stopwatch();

sw.Start();

//通过循环写入大量的数据,这种方法显然是肉垫

for (int i = 0; i < recc; i++)

{

string sql = "insert into dept values(" + i.ToString()

+ "," + i.ToString() + "," + i.ToString() + ")";

command.CommandText
= sql;

command.ExecuteNonQuery();

}

sw.Stop();

System.Diagnostics.Debug.WriteLine(
"普通插入:" + recc.ToString()

+ "所占时间:" + sw.ElapsedMilliseconds.ToString());

it知识库极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。