0 0

如何向SQL插入2000万笔数据10

最近公司需要测试系统的性能,经理叫我向SQL2000里插入2000万条数据。该表ID为自增,其余字段的值都可以为空。
项目框架使用的是SSH。我用了最笨的方法for()里面INSERT了2000万个循环插入。结果插入了5个小时才完成-.-
请问大大们有好点的方法吗

问题补充:<div class="quote_title">Anddy 写道</div><div class="quote_div"><div class="quote_title">引用</div><div class="quote_div">我用了最笨的方法for()里面INSERT了2000万个循环插入</div> <br />发了很长时间的瓶颈在于java for循环时间太长,而不是数据库插入数据过慢。 <br /> <br />========================= <br />针对这个瓶颈,可以考虑<strong>使用java多线程技术。</strong> <br /> <br />缩短for循环使用的时间,从而消除瓶颈。</div> <br /> <br /> <br />请问有在SQL直接快速生成的方法吗..用函数或者是存储过程能实现吗 <br />或者HIBERNATE有方法能快速生成吗...我记得也有面试题目是类似的

问题补充:<div class="quote_title">myreligion 写道</div><div class="quote_div">用批处理,插入1000条提交1次,能快很多。</div> <br />请问如何批处理呢<img src="/images/smiles/icon_cry.gif"/> <br /> <br />是在FOR里面写1000条INSERT语句吗?

问题补充:<div class="quote_title">Anddy 写道</div><div class="quote_div"> <br />看看这个跟你一样的问题,时间太长。 <br /><a href="http://www.gbsou.com/2010/04/20/2521.html" target="_blank">http://www.gbsou.com/2010/04/20/2521.html</a> <br /> <br /><a href="http://blog.sina.com.cn/s/blog_5c4331db0100hi77.html" target="_blank">http://blog.sina.com.cn/s/blog_5c4331db0100hi77.html</a></div> <br /> <br /> <br />谢谢哈..我也觉得批处理会快点..待具体测试后再给分<img src="/images/smiles/icon_wink.gif"/>
2010年5月11日 12:31

9个答案 按时间排序 按投票排序

0 0

利用数据库数据生成工具datafactory随意插入数据进行性能测试:

2010年5月27日 16:36
0 0

直接写存储过程,然后调用存储过程行不行啊,你可以试试。

2010年5月12日 12:48
0 0

利用hibernate的批量插入,在插入N条数据时,进行session.flush()与session.clear()方法的调用,将插入的对象立即写入数据库并释放内存。数据条数N一般与JDBC批量设置值相同。

2010年5月11日 23:29
0 0

在mysql里面可以一条语句插入N条记录的功能
不知在sql server里面有没有

2010年5月11日 18:21
0 0

hibernate应该支持写批处理,如果不行就用JDBC batcher。或者使用guzz,guzz的写法是:

TransactionManager tm = guzzContext.getTransactionManager() ;
CompiledSQL cs = tm.getCompiledSQLBuilder().buildCompiledSQL(User.class, "delete from @@" + User.class.getName() + " where @id = :id") ;

WriteTranSession session = tm.openRWTran(false) ;
SQLBatcher batcher = session.createCompiledSQLBatcher(cs) ;

for(int loop = 0 ; loop < 100 ; loop++){
        batcher.addNewBatchParams("id", user.getId()) ;
}
        
batcher.executeUpdate() ;
session.commit() ;


具体可以看 http://code.google.com/p/guzz/wiki/TutorialTranSession?ts=1273571881&updated=TutorialTranSession 的“批量操作”。

2010年5月11日 17:55
0 0


看看这个跟你一样的问题,时间太长。
http://www.gbsou.com/2010/04/20/2521.html

http://blog.sina.com.cn/s/blog_5c4331db0100hi77.html

2010年5月11日 17:05
0 0

用批处理,插入1000条提交1次,能快很多。

2010年5月11日 16:21
0 0

引用
请问有在SQL直接快速生成的方法吗..用函数或者是存储过程能实现吗

用sql来实现不了多线程插入数据的。
===================================
java中多线程的实现很简单,继承Thread类或者实现Runnable接口,重写run方法。

另外一个主类的main方法中new线程对象出来,调用线程的start方法。

========
OK 几个线程同时(表面上)进行了。

=============
不知道我的理解有误没?

2010年5月11日 14:18
0 0

引用
我用了最笨的方法for()里面INSERT了2000万个循环插入

发了很长时间的瓶颈在于java for循环时间太长,而不是数据库插入数据过慢。

=========================
针对这个瓶颈,可以考虑使用java多线程技术。

缩短for循环使用的时间,从而消除瓶颈。

2010年5月11日 12:40

相关推荐

    Oracle中如何用一条SQL快速生成10万条测试数据

    本文将深入探讨如何利用一条SQL语句在Oracle中快速生成10万条测试数据,这对于数据库管理员和开发人员来说是一项极为实用的技能。 ### 核心知识点:使用SQL生成大量测试数据 #### 1. **理解ROWNUM和CONNECT BY ...

    45-MySQL单表2000万数据查询慢解决方案1

    MySQL单表2000万数据查询慢解决方案1 本文主要讨论了如何解决MySQL单表2000万数据查询慢的问题,通过将表分区和使用时间触发器来实现数据的优化。 分区设计 在解决方案中,我们使用的是按照8周将单表分为8个区,...

    SQL Server 2000数据库程序设计

    SQL Server 2000支持SQL的基本语法,包括数据查询、数据更新、数据插入和数据删除等操作。通过学习“打开方式.htm”可能涵盖的入门教程,我们可以了解如何启动SQL Server管理工具,如企业管理器和查询分析器,以及...

    android中SQLite数据库中用insert同时插入多条记录的方法和效率比较

    下面我们将比较三种方法的效率:将同时插入大量的数据写成一条 SQL 语句、最笨的方法用 insert 语句一条一条的输入、使用事务。 方法一:将同时插入大量的数据写成一条 SQL 语句 这是一种简单的方法,将所有要插入...

    SERVER SQL学习教程

    - **数据插入、更新和删除**:理解INSERT、UPDATE和DELETE语句的工作原理。 - **数据操作**:学习如何使用JOIN(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)连接不同表的数据。 3. **索引和性能优化** - **...

    实验3答案-sql2.sql

    在法人表中插入如下数据:法人代码号为:E11,法人名称为:新法人,注册资金为:2350万元,经济性质使用默认值。 删除银行编号为“B321B”的银行信息。 删除2000年之前一次贷款金额最小的贷款记录。 删除从贷款日期...

    SQL查询效率:100w数据查询只需要1秒钟

    ### SQL查询效率提升技巧:如何实现100万数据秒级查询 在处理大量数据时,提高查询效率是至关重要的。本文将通过一系列步骤展示如何优化SQL查询性能,以达到即使是100万条记录也能在一秒钟内完成查询的目标。 ####...

    一个高效的SQL分页语句

    接下来,我们向`TestTable`表中插入100万条记录。为了简化操作,这里使用循环插入的方式: ```sql SET IDENTITY_INSERT TestTable ON DECLARE @i INT SET @i = 1 WHILE @i BEGIN INSERT INTO TestTable ([ID], ...

    经典SQL语句大全

    插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value...

    sql应用

    首先,让我们通过“70-228 SQL Server 2000企业版的安装、配置和管理模.pdf”了解SQL Server 2000的使用。SQL Server是由Microsoft开发的一款强大的数据库管理系统,广泛应用于企业级数据存储和处理。安装SQL Server...

    sql2000海量数据库的查询优化

    通过循环插入的方式填充了大量数据,确保了测试场景的代表性,尤其是在处理大量数据时的查询优化策略的有效性验证。 ### IN与EXISTS的性能对比 在处理子查询时,`IN`与`EXISTS`是两种常用的语法结构,但它们在执行...

    在SQL Server中通过SQL语句实现分页查询

    接着,插入2万条记录: ```sql SET IDENTITY_INSERT TestTable ON DECLARE @i INT SET @i = 1 WHILE @i BEGIN INSERT INTO TestTable ([ID], FirstName, LastName, Country, Note) VALUES (@i, 'FirstName_XXX', ...

    数据库课件:第三章 关系数据库标准语言SQL.ppt

    这些数据类型是SQL Server 2000中用于创建表、插入和更新数据的基础,理解它们的特性和使用方法对于有效管理数据库至关重要。通过学习这些数据类型,可以更好地设计数据库结构,确保数据的准确性和存储效率。

    sql执行效率

    - 插入100万条记录,每条记录包含唯一的`userid`、随机的`nick`、随机的`classid`(取值范围为0到9)以及当前时间戳`writetime`。 4. **查询对比**: - **方法一**:使用`NOT IN`子查询,执行时间较长(约8秒)。...

    使用 Python 处理3万多条数据只要几秒钟

    通过建立数据库连接,创建游标对象,然后执行SQL语句(如`CREATE TABLE`来创建表结构,`INSERT INTO`来插入数据),可以批量写入数据。在示例代码中,使用了`os`库来遍历当前目录下的所有txt文件,逐行读取数据并...

    ASP EXCEL导入SQL

    也可以在客户和资源之间插入不同的中间组件来提升性能和安全等,如,代理服务,缓存服务,网关服务等;  因为是基于HTTP/HTTPS的资源请求,因此本次连接和下一次到服务器的连接之间没有状态。由于361CRM平台采用了...

    oracler技术总结

    在SQL Server 2000中,如果需要循环插入100万条数据,可以使用游标配合批处理的方式实现。虽然这个场景在Oracle数据库中通常会用到`INSERT ALL`语句或者数据泵工具,但在SQL Server中,我们可能需要编写存储过程来...

    数据库操作语句大全(sql)

    数据库操作语句大全(sql) 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_...

    海量数据的处理及优化.docx

    4. **实践经验**:在实际项目中,如处理6000万条日志数据,选择适合的数据库工具(如SQL Server 2005相对于SQL Server 2000的性能提升)以及调整缓存大小、优化索引策略、管理虚拟内存等都是提升处理效率的关键。...

Global site tag (gtag.js) - Google Analytics