`
thecloud
  • 浏览: 950708 次
文章分类
社区版块
存档分类
最新评论

数据库插入百万数据

 
阅读更多

这是对一次数据库作业的深究

首先说一下作业题目要求:


建立一张包含四个字段的表,表名为test

第一列为id,主键,自增。

第二列为col1,随机为MikeBobJackAliceCathyAnnBettyCindyMaryJane中的一个

第三列为col2,随机为一个5位字母,字母限制在a-e

第三列为col3,随机为一个1-20之间的整数

按照步骤一中对表的要求插入100万条记录,记录执行的时间

对要插入的数据范围进行一定的预处理


(1)对于col1,创建取值范围数组


随机获取的时候只要调用 col1Values[(int)(Math.random()*10)] 即可。

(2)对于col2,通过递归创建取值范围数组

随机获取的时候只要调用col2Values[(int)(Math.random()*3125)]即可。

(3)对于col3,随机获取的时候只要(int)(Math.random()*20)+1即可。

插入大数据量的数据

(1)首先想到的方法当然是传统的一行一行的插入方法:通过Connection获得Statement,再调用Statement对象的execute函数执行sql语句,插入一行,这样循环100万次即可,但是时间复杂度太高,估计没有个把小时是搞不定的。

(2)然后想到了对sql语句进行预处理,于是很大程度上提高了效率。下面是这部分代码的核心部分。

测试结果如下:

start insert data
end insert data
insert time: 110.215 s

(3)对于上面的结果还是不太满意,于是便开始了探索。

(a)从网上看到一个方法,使用在PreparedStatement 类上的addBatch(),executeBatch()方法,通过批量处理,可以一次性的将1000甚至10000sql插入操作作为一个事务进行批量优化,并且作者在oracle的数据库上测试过时间是低于10s的。于是我也尝试了一下,发现依然是107s左右,于是便迷茫了。

(b)这个时候看到网上的另外一篇文章,解释了为什么MySqlJDBC驱动不支持批量操作,原来Mysql不支持addBatch(),executeBatch()等方法的批量优化,而Oracle则数据库支持,并且可以在360 ms左右的时间插入100万条记录

网址:http://elf8848.iteye.com/blog/770032

(c)后来看到葛班长的日志,他通过PythonSQLite中插入100万条数据只用了4秒,原因在于Python对所有的这100万条插入语句进行了优化,将所有的插入操作放到了同一个事务中,这样极大的减少了开启和取消事务的时间,而正是这部分操作会消耗大量的时间。

网址:http://aegiryy.net/?p=380

(d)于是我受到了启发,并且了解到对于Mysql数据库的操作时,一个sql插入语句中可以插入多行数据。于是我尝试通过StringBuffer构造一个比较大的sql语句,每个语句可以插入1万行的数据(如果是10万或者100万的话会超出堆内存限制),这样循环100次即可完成插入。下面是这种方法的核心代码:

测试结果如下:

start insert data
end insert data
insert time: 15.083 s

(e)最后我想到了再将这种方法优化,采用预处理的方式,在代码易读性和效率上都有所提高,虽然效率提高的不多。下面是这个方法的核心代码:

测试结果如下:

start insert data
end insert data
insert time: 14.47 s

最后贴出最终个解决方案的所有代码:

分享到:
评论
1 楼 追梦-- 2013-10-20  
赞一个!

相关推荐

    java连接数据库并且向数据库插入数据

    在Java编程中,连接数据库并插入数据是一项基本且重要的任务,尤其在开发Web应用程序时,如JSP(JavaServer Pages)和Servlet结合MySQL数据库的场景。在这个过程中,开发者需要掌握如何配置数据库连接、编写SQL语句...

    往数据库插入数据,相同的不插入

    ### 往数据库插入数据,相同的不插入 在Java开发中,常常会遇到需要将一系列数据插入数据库的需求。但在实际操作过程中,为了避免重复数据的插入,我们需要实现一种机制来判断待插入的数据是否已存在于数据库中。这...

    MFC数据库插入数据代码

    `MFC数据库插入数据代码.txt`文件可能包含了具体的代码示例,你可以参考这个文件来了解更详细的实现细节。在实际项目中,根据具体需求,你可能需要处理更多复杂情况,如事务管理、批量插入等。记得在编写代码时遵循...

    Qt中操作数据库例子-插入数据

    本示例将详细介绍如何在Qt中使用QSqlTableModel来插入数据到数据库。QSqlTableModel是Qt提供的一种用于数据库操作的模型类,它方便地实现了数据的CRUD(创建、读取、更新和删除)操作,并且与QTableView等视图类完美...

    用java程序怎么实现200ms往数据库中插入10000条数据

    Java 实现高效数据库插入数据 在 Java 程序中,实现高效的数据库插入数据是非常重要的。以下是相关的知识点: 使用 JDBC 连接数据库 在 Java 程序中,使用 JDBC(Java Database Connectivity)连接数据库是非常...

    插入数据到数据库

    数据库是存储和管理信息的核心工具,对于初学者来说,理解如何向数据库中插入数据是学习数据库操作的基础。本文将深入探讨“插入数据到数据库”的概念、步骤和常见方法。 首先,我们要了解数据库的基本结构。数据库...

    JAVA中向数据库中插入数据的源代码

    在Java编程中,向数据库插入数据是常见的操作之一,尤其在构建桌面应用或者Web应用时。本示例将重点讲解如何使用Java与Microsoft Access数据库进行交互,实现数据的插入功能。Access是一种轻量级的关系型数据库管理...

    labview 数据库的表格创建,数据更新,数据删除,数据查询,数据插入,数据显示。

    在LabVIEW中与数据库交互是常见的需求,本教程将详细介绍如何使用LabVIEW进行数据库的表格创建、数据更新、数据删除、数据查询以及数据插入,并展示如何显示这些数据。 首先,我们需要理解LabVIEW中的数据库接口。...

    在ASP.NET中向数据库中插入数据.rar

    在ASP.NET中向数据库插入数据是一项常见的开发任务,它涉及到Web应用程序与数据库之间的交互。ASP.NET是Microsoft开发的一个用于构建动态网站、Web应用和Web服务的框架,它提供了丰富的工具和API来帮助开发者轻松地...

    向Oracle数据库插入Clob大段文本解决方法

    本文将详细介绍如何有效地向Oracle数据库插入Clob大段文本,以及在操作过程中可能遇到的问题与解决方案。 ### 一、理解CLOB类型 CLOB类型是Oracle数据库中用于存储大量文本数据的数据类型,它可以存储最大为4GB的...

    VC 演示如何使用insert语句批量向数据库插入数据.rar

    VC 演示如何使用insert语句批量向数据库插入数据,这个我感觉挺有用处吧,一般情况下,我们录入都是一条一条的,但信息量较大的时候,就需要批量插入数据了,我们可以先读取外部指定格式的文件,然后将数据转换为可...

    自动生成数据库插入脚本

    在IT行业中,数据库管理是至关重要的任务之一,而“自动生成数据库插入脚本”就是一种高效的数据处理方式,尤其在需要大量数据初始化或者测试场景下。这个标题所指的是一种技术,通过自动化工具或编程方法,能够根据...

    C#.NET中如何批量插入大量数据到数据库中

    在C#.NET中批量插入大量数据到数据库是一个常见的任务,特别是在处理诸如从Excel文件导入数据等场景时。这里,我们将探讨如何使用C#.NET高效地完成这个任务,并提供一个简单的示例来说明整个过程。 首先,我们需要...

    Delphi批量插入数据库数据..rar

    本压缩包“Delphi批量插入数据库数据”可能包含了一个或多个示例代码,用于演示如何在Delphi中高效地向数据库批量插入数据。 批量插入数据是数据库操作中的常见需求,尤其是在处理大量数据时,为了提高效率和减少...

    Sqlite数据库里插入数据的条数上限是500

    今天在向Sqlite数据库里插入数据的时候,报了这样一个错: 代码如下: “too many terms in compound SELECT” 去Stackoverflow上查了一下,发现有人回答这个问题:链接 原来一次性向数据库里插入数据的条数不能太...

    向sql server数据库插入中文时显示乱码

    在开发过程中,尤其是在使用ASP.NET与SQL...通过上述步骤,我们可以有效地解决在ASP.NET 2.0应用程序中向SQL Server 2005数据库插入中文时出现乱码的问题。需要注意的是,在实际应用中,还需根据具体情况灵活调整配置。

    向数据库插入blob数据实例源码--在mysql中通过

    Blob(Binary Large Object)在数据库中用于存储二进制大对象,如图片、音频或视频文件等...源码中可能包含了类似的实现,通过解压提供的"向数据库插入blob数据实例源码"压缩包,你可以查看并运行完整的Java代码示例。

    ORACLE数据库中插入大字段数据的解决方法

    在ORACLE数据库中插入大字段数据时,可能会遇到性能问题或者由于字段长度限制导致的错误。这类问题通常涉及LOB(Large Object)类型的字段,如CLOB(Character Large Object)和BLOB(Binary Large Object)。本篇...

    向数据库中插入(添加)数据

    在本篇文章中,我们将深入探讨如何使用 C# 语言通过 SQL 命令向数据库中插入数据。这个过程通常涉及到几个关键步骤:建立数据库连接、构造 SQL 插入语句、执行 SQL 命句以及关闭数据库连接。以下是对这些步骤的详细...

    批量插入数据到Oracle数据库Demo

    本教程将详细讲解如何进行批量插入数据到Oracle数据库,以提高数据导入的效率。 批量插入数据到Oracle数据库通常比单条插入更有效率,因为它减少了与数据库的交互次数,降低了网络延迟,并减少了系统资源的占用。...

Global site tag (gtag.js) - Google Analytics