免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3023 | 回复: 9
打印 上一主题 下一主题

请教各位高手:如何高效插入上亿条记录? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-06 13:42 |只看该作者 |倒序浏览
各位老大:
    有一个表,因原表结构损坏,已经BCP OUT数据了,分为5个文本文件,每一个都有4千万以上的记录。现在已经重建表及约束、索引,如何能高效插入文本文件里的记录?

论坛徽章:
0
2 [报告]
发表于 2007-10-06 14:29 |只看该作者
去掉约束索引

论坛徽章:
0
3 [报告]
发表于 2007-10-06 14:30 |只看该作者
多个表分区,bcp分段导入

论坛徽章:
0
4 [报告]
发表于 2007-10-07 10:43 |只看该作者
这两种方法都不是很好,二楼的方法去掉约束后,数据全导入了,但是要重建约束,结果造成了日志被挂起,用三楼的方法,速度好慢,要知道,我的数据有194200000行啊,要分多少个表分区啊.

论坛徽章:
0
5 [报告]
发表于 2007-10-08 11:56 |只看该作者
这么大的数据量,好象也没啥好办法吧

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
6 [报告]
发表于 2007-10-08 16:30 |只看该作者
约束是PK吗?是否可以考虑建成非聚簇的

论坛徽章:
0
7 [报告]
发表于 2007-10-09 12:03 |只看该作者
没办法了,我写了一个循环语句,先把分段文本文件bcpin 一个无索引无约束的表,然后指定行数插入正正式表,大约要5天时间才能全部导入.

论坛徽章:
0
8 [报告]
发表于 2007-10-09 12:05 |只看该作者
至少这样做不会造成挂起.

论坛徽章:
0
9 [报告]
发表于 2007-10-09 12:07 |只看该作者
DECLARE @SL INT,@BL INT,@ZSL INT,@CS INT
SELECT @SL=80000,@ZSL=40000000,@CS=0
WHILE @SL>0
BEGIN
        SET ROWCOUNT @SL
        INSERT INTO AA SELECT * FROM AA_TEMP
        DELETE FROM AA_TEMP
        select '第'+CONVERT(CHAR(10),@CS+1)+'次','插入'+CONVERT(CHAR(10),@SL)+'条', '还剩'+CONVERT(CHAR(10),@ZSL-@SL)+'条'
        SET ROWCOUNT 0
        commit
        SELECT @ZSL=@ZSL-@SL,@CS=@CS+1
        DUMP TRAN DATABASE WITH TRUNCATE_ONLY
        IF @CS>=500
                BREAK
        ELSE
                     CONTINUE
END

论坛徽章:
0
10 [报告]
发表于 2007-10-10 11:05 |只看该作者
马儿要跑,就要吃草
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP