CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

告急:海量数据插入

楼主FEB15(张郎)2006-12-01 19:15:09 在 MS-SQL Server / 疑难问题 提问

数据是两个表当中的查询结果  
   
  动态数据,插入量不确定,估计在200万以内。  
   
  插了一个小时了,不见表增长,不见数据库日志变化,但是服务器又是满负荷在跑? 问题点数:10、回复次数:11Top

1 楼FEB15(张郎)回复于 2006-12-01 19:15:41 得分 0

量小时,一切正常  
   
   
  不好意思,唯一的十分,最近提问过猛。Top

2 楼dutguoyi(新鲜鱼排)回复于 2006-12-01 19:17:50 得分 0

可不可以分批。Top

3 楼FEB15(张郎)回复于 2006-12-01 19:18:45 得分 0

不可以  
   
   
  原始语句  
  Insert   Into   Sys_MatchPartIDs(InquiryClassID,InquiryCustomerID,InquiryID,StockClassID,StockCustomerID,StockID)  
  SELECT   I.ClassID,I.CustomerID,I.ID,S.ClassID,S.CustomerID,S.ID  
  FROM   Sys_Inquiry   AS   I,Sys_Stock   AS   S  
  Where   S.PartNo   LIKE   I.PartNo+'%'   AND   (  
  ((SELECT   Match   FROM   Sys_Class_MatchPath   WHERE   ClassID=I.ClassID   AND   MatchClassID=S.ClassID)='True')   or  
  ((SELECT   Match   FROM   Sys_Class_MatchPath   WHERE   ClassID=S.ClassID   AND   MatchClassID=I.ClassID)='True')  
  )Top

4 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-12-01 19:20:21 得分 0

楼主的主机配置不高,最好分批  
  Top

5 楼FEB15(张郎)回复于 2006-12-01 19:25:09 得分 0

表A   表B   两张表的结构相同  
   
  表A中某字段与表B中某字段进行   后百分号查询  
   
  两个表中的数据都有分类标记,分类设定某些类是不相互匹配的  
   
  主要是将匹配数据的几个关键数字ID插入到   表C  
   
  现在插了一个小时了,不见数据库动静,日志也不长,就内存长到400MB   CPU一直满负荷运行Top

6 楼FEB15(张郎)回复于 2006-12-01 19:26:12 得分 0

这种情况表C是不是不建任何索引最佳?Top

7 楼FEB15(张郎)回复于 2006-12-01 19:31:46 得分 0

实在忍受不了了,终止了查询。  
   
  跑去看一条数据都没进去。  
   
  但是我直接在表上输入一行记录,发现索引ID已经是三万多,而不是1.  
   
  那这说明了什么?但是为什么日志没有增加?Top

8 楼zjcxc(邹建)回复于 2006-12-01 20:18:31 得分 0

事务的问题  
   
  你一次性插入海量数据,   数据的插入是比较快的,   但事务的提交是比较慢的  
   
  我做过导表的时候,   插入的数据量是2000万左右,   插入数据使用了不到1小时,   提交事务用了差不多4小时.  
   
  提交事务的时候,   你是看不到数据变化的,   但服务器的资源是消耗着的,   磁盘的I/O此时应该是最忙碌的Top

9 楼zjcxc(邹建)回复于 2006-12-01 20:20:00 得分 0

终止了查询,   跑去看一条数据都没进去  
   
  因为你一次性插入,   是一个事务来处理的(sql自动开启的事务),   所以终止肯定会回滚事务,   则数据自然没有.  
   
  而自增ID是不受事务回滚影响的,   所以ID是3万多了Top

10 楼zjcxc(邹建)回复于 2006-12-01 20:22:13 得分 10

像楼主的这种问题,   最佳做法是用BCP  
   
  因为你的两个表结构一样,   所以只需要用bcp的queryout方式,   把select的结果导出为文件,   然后用bcp把数据导入到目的表就成了.  
   
  bcp几乎不写日志,   所以这种方法可以很快完成你的处理.Top

11 楼FEB15(张郎)回复于 2006-12-01 21:02:04 得分 0

谢谢邹老大  
   
  我把查询的那个%暂时摘掉了,10分钟内完成了操作。  
   
  没接触过bcp  
   
  不知道我用   OpenRowSet写到   Access后再拿回来会怎样,先下班明天上班再搞。  
   
  实在不好意思就只有十分,这段时间分都耗在了SQL版。  
   
  如果老大没其它指点了我就明天结贴。   没分啊,穷啊!明天还有十分。Top

相关问题

关键词

得分解答快速导航

  • 帖主:FEB15
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo