当前位置:编程学习 > C#/ASP.NET >>

5000万条测试记录

老鸟们,帮帮我吧!

今天BOSS让我建一张10个字段以上的一张表,然后插入测试记录5000万条

给点意见,或者是方法啊! --------------------编程问答-------------------- 看内容是什么类型就定义什么类型的字段  
   尽量别浪费空间 --------------------编程问答-------------------- 把里面的数据都写成int!嘿嘿 --------------------编程问答-------------------- 我想死的心都有了

看来我还真的是浪费空间了!
、 --------------------编程问答-------------------- varchar呢? --------------------编程问答-------------------- 分段取数据 --------------------编程问答-------------------- SQL循环插入数据,比如
select count(*) from Test   
  
declare @a int  
set @a = 1   
while @a<1000000   
begin  
    insert into Test(name) values(@a)   
    set @a = @a + 1   
end  --------------------编程问答-------------------- 顶。。 --------------------编程问答-------------------- http://blog.csdn.net/fisea/archive/2009/12/14/5003136.aspx --------------------编程问答-------------------- 5楼的分段去数据什么意思呢?
我不是很清楚 --------------------编程问答-------------------- // 定义变量用户保存当前索引
DECLARE @i int
set @i=0

//开始循环插入数据;
WHILE @i < 50000000
BEGIN
Set @i =@i +1 
 // 插入数据操作
END

如果您不希望数据一样您可以使用i 例如名称字段+i 
您可以分批插入5千万分几批插入 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 10 楼 ben254422571 的回复:
// 定义变量用户保存当前索引
DECLARE @i int
set @i=0

//开始循环插入数据;
WHILE @i < 50000000
BEGIN
Set @i =@i +1 
 // 插入数据操作
END

如果您不希望数据一样您可以使用i 例如名称字段+i 
您可以分批插入5千万分几批插入

顶 --------------------编程问答-------------------- 5000W 哈哈 我上次插入 200W数据测试分页 
分了好几次插入呢 哈哈 CPU吃不消 电脑老了哇, --------------------编程问答--------------------

1create database data_Test  --创建数据库data_Test 
 2GO 
 3use data_Test 
 4GO 
 5create table tb_TestTable   --创建表 
 6( 
 7    id int identity(1,1) primary key, 
 8    userName nvarchar(20) not null, 
 9    userPWD nvarchar(20) not null, 
10    userEmail nvarchar(40) null 
      。。。
11) 
12GO


------------------------------------------------
插入数据
1--插入数据 

2set identity_insert tb_TestTable on 
 3declare @count int 
 4set @count=1 
 5while @count<=50000000 
 6begin  
 7    insert into tb_TestTable(id,userName,userPWD,userEmail) values(@count,'admin','admin888','lli0077@yahoo.com.cn') 
 8    set @count=@count+1 
 9end 
10set identity_insert tb_TestTable off


  --------------------编程问答-------------------- 是啊 

哭吧我! 现在还在插 都过去1个多小时了!

还在电脑没挂 嘿嘿 --------------------编程问答--------------------
引用 6 楼 jetaimejay 的回复:
SQL循环插入数据,比如
select count(*) from Test  
  
declare @a int  
set @a = 1  
while @a<1000000  
begin  
  insert into Test(name) values(@a)  
  set @a = @a + 1  
end


只有引用的内容不允许回复! --------------------编程问答-------------------- 上次我插,每200万条用10分钟,慢慢等吧 --------------------编程问答-------------------- 创建一个id为自动增涨列的表,然后用循环插入一样的数据
代码如下:

create database DB--创建数据库DB
GO 
use DB
GO 
create table tableName--创建表 

    id int identity(1,1) primary key, 
    userName nvarchar(20),
    ......
)
set identity_insert tableName  on
declare @count int 
set @count=1 
while @count<=50000000 
begin  
    insert into tb_tableName(id,userName) values(@count,'admin') 
    set @count=@count+1 
end 
set identity_insert tableName off
--------------------编程问答-------------------- 楼上的方法可行 --------------------编程问答-------------------- CPU吃不消,那你只能手动慢慢输5000w条记录吧 --------------------编程问答--------------------
引用 20 楼 teng_s2000 的回复:
CPU吃不消,那你只能手动慢慢输5000w条记录吧
--------------------编程问答-------------------- 5000W才一个省那么多人,插13个亿进来 --------------------编程问答-------------------- 分几次循环下吧 --------------------编程问答-------------------- 应该是硬盘吃不消吧。

  --------------------编程问答-------------------- 用电子表格造数据,
然后用bcp命令导入,
是速度最快的方法。
--------------------编程问答-------------------- 存储过程最快.

10000一次COMMINT 很快的 
估计 几个小时能搞定
--------------------编程问答-------------------- 我试下一下CPU占用基本在个位数。

--------------------编程问答-------------------- 数据插入, 充分利用CPU资源, IO资源, 
1, 存储过程是必要的, 
2, 分段COMMIT也是必要的
3,确根据CPU和内存调整每次COMMIT的件数是很有必要的

建立表
CREATE TABLE [dbo].[Table1](
[DATA1] [int] NULL,
[DATA2] [int] NULL,
[DATA3] [int] NULL,
[DATA4] [int] NULL,
[DATA5] [int] NULL,
[DATA6] [int] NULL,
[DATA7] [int] NULL,
[DATA8] [int] NULL,
[DATA9] [int] NULL,
[DATA10] [int] NULL,
[DATA11] [int] NULL
) ON [PRIMARY]

执行存储过程

alter PROCEDURE InsertData
AS
BEGIN
declare   @count  int;
declare   @data1  int;
set @count = 0;
set @data1 = 1;
SET NOCOUNT ON;
begin TRANSACTION
while @count<5000001
begin
set @count = @count + 1;
insert into [TestData].[dbo].[Table1] values(@count,1,1,1,1,1,1,1,1,1,1);
set @data1 = @count % 200000;
if @data1 = 0
begin
commit
begin TRANSACTION
end
end

commit
END

机器翻译: CPU E5200, 内存4G, SQLSEVER2008
500万条数据测试结果 1分钟12秒
如果CPU好一点 速度会更快 --------------------编程问答-------------------- 干嘛需要那么庞大的测试数据 --------------------编程问答--------------------
引用 18 楼 fxsy6669 的回复:
创建一个id为自动增涨列的表,然后用循环插入一样的数据
代码如下:

create database DB--创建数据库DB
GO 
use DB
GO 
create table tableName--创建表 

  id int identity(1,1) primary key, 
  userName nvarchar(20),
  ......
)
set ……

试了下,50万数据,用了2分钟.. --------------------编程问答-------------------- --------------------编程问答-------------------- 把类型换成varchar就可以了 做成你需要的逻辑

可以根据CPU的类型, 单核心CPU就跑一个存储过程
                   双单核心CPU就跑两个存储过程

20个字段以内, 字段不长的情况
5000万条数据大约需要半小时吧 --------------------编程问答-------------------- 没做过这么大批量的
帮顶
感觉应该是使用存储过程是最快的吧
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,