CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

insert插入速度很慢的问题(高手请进,解决马上结帖)

楼主hsgzs(雾尘心)2006-03-15 12:16:28 在 Oracle / 开发 提问

原insert语句如下:  
  insert   into   qa_data_tmp1(zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,searchid,tmp_yph,tmp_date,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS)    
  select   zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,3,fxsj_by1,sysdate   ,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS      
  from   view_fxsjcx   where   length(fxsj_sj)>0     and     fxsj_rq   between'2006-03-14'     and   '2006-03-14'     and   zzbm_mc   in   ('常压','催化','电精制','气分','加氢精制','重整','聚合','制硫','酸性水','油品气柜','小气分','产品质量数据','原材料质量数据')     and   fxsj_by1     in(   select   fxsj_by1   from   view_fxsj   where     length(fxsj_sj)>0   and   fxsj_rq>='2006-03-14'   and   fxsj_rq<='2006-03-14'   and   fxsj_hgbz='0')   order   by     ZZDYYP_IDS  
  刚开始的时候速度是很快的,但是过了几个月以后,发现插入一次竟然要30秒以上,就算只有40几条记录也要这么久,开始以为是索引的问题,结果把索引全部去掉,再用脚本重新生成,还是一样,请问各位大虾,是不是插入时要写入日志的问题??那么这个问题该怎么解决呢??? 问题点数:80、回复次数:21Top

1 楼mosquitoxh((IT,中间件,架构)http://it.paiming.org/bbs)回复于 2006-03-15 12:28:07 得分 20

索引是不能去的,应该优化  
   
  你这里还有查询,  
   
   
  建议先看看查询  
  select   zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,3,fxsj_by1,sysdate   ,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS      
  from   view_fxsjcx   where   length(fxsj_sj)>0     and     fxsj_rq   between'2006-03-14'     and   '2006-03-14'     and   zzbm_mc   in   ('常压','催化','电精制','气分','加氢精制','重整','聚合','制硫','酸性水','油品气柜','小气分','产品质量数据','原材料质量数据')     and   fxsj_by1     in(   select   fxsj_by1   from   view_fxsj   where     length(fxsj_sj)>0   and   fxsj_rq>='2006-03-14'   and   fxsj_rq<='2006-03-14'   and   fxsj_hgbz='0')   order   by     ZZDYYP_IDS  
   
  的性能  
  Top

2 楼hsgzs(雾尘心)回复于 2006-03-15 12:58:25 得分 0

查询速度大概是2秒,就是前面加了insert以后变慢Top

3 楼bobfang(匆匆过客)回复于 2006-03-15 13:49:03 得分 0

需要看看insert和单独执行select的执行计划。Top

4 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-15 13:56:34 得分 60

insert   /*+   APPEND   */into   ..试试,这个表可能经过大量的DML碎片很多,建议先整理Top

5 楼hsgzs(雾尘心)回复于 2006-03-15 14:00:50 得分 0

回   cenlmmx(学海无涯苦作舟):  
  执行完成,28.812秒  
   
  回bobfang(匆匆过客)   :  
      具体怎么操作阿??Top

6 楼hsgzs(雾尘心)回复于 2006-03-15 14:03:40 得分 0

对于插入的表我做了很多的索引,每次插入的时候都要查一遍索引,看是否重复,但是我把索引删掉一次后,还是要这么多的时间,不知道什么原因??Top

7 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-15 14:17:04 得分 0

大批量插入最好关闭索引,要不会很慢的,还有约束也是一样.  
  这样create   table   newtable   as   select   *   from   qa_data_tmp1,  
  再插入newtable看要多少时间?Top

8 楼hsgzs(雾尘心)回复于 2006-03-15 14:23:30 得分 0

回   cenlmmx(学海无涯苦作舟):  
      照你的方法做了,再插入时间是25.629   ,22条记录  
  Top

9 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-15 14:49:08 得分 0

怎么还这么大,插了多少数据?Top

10 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-15 14:49:56 得分 0

sorry没看到,你表里现在多少数据?Top

11 楼hsgzs(雾尘心)回复于 2006-03-15 15:29:19 得分 0

我是from的一个视图,视图里有46万条记录Top

12 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-15 15:45:10 得分 0

那直接插表不通过视图怎么样,时间多少?Top

13 楼hsgzs(雾尘心)回复于 2006-03-15 16:05:19 得分 0

直接插表的话,速度快一点,大概10秒,但是我的视图查询很快阿,两秒上下阿,有关系么??  
  Top

14 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-15 16:12:26 得分 0

插视图会比直接插表慢些,但这个具体量化值没研究过.Top

15 楼hsgzs(雾尘心)回复于 2006-03-15 17:38:21 得分 0

现在问题是我在数据量20万条左右的时候,是很快的,那时新建了索引,补充了很多数据。到现在4个多月了,速度开始下来了,我的那个tmp1是做临时表用的,没有每次都在临时表空间里创建删除,但是现在速度很慢,不知道是什么原因,所以想请教高手,看看问题所在Top

16 楼hsgzs(雾尘心)回复于 2006-03-16 09:20:10 得分 0

现在我把视图改成from   a,b,c   where   a.z1=b.z1   and   .....代码放在后面,但是插入还是要16秒以上,怎么回事呢?Top

17 楼lishaowensdut(小李探花)回复于 2006-03-16 09:51:10 得分 0

建议在qa_data_tmp1新增一列guid做主键。有可能是主键的原因。  
  insert   into   qa_data_tmp1(id,zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,searchid,tmp_yph,tmp_date,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS)  
  select   newid(),zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,3,fxsj_by1,sysdate   ,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS  
  from   view_fxsjcTop

18 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-16 09:59:44 得分 0

你的视图还有join,那会更慢,想不出来什么好办法还是建议直接插表.Top

19 楼mosquitoxh((IT,中间件,架构)http://it.paiming.org/bbs)回复于 2006-03-16 12:13:51 得分 0

DECLARE  
  CNT   NUMBER(10):=0;  
  I   NUMBER(10);  
  BEGIN  
   
  SELECT   COUNT(*)   INTO   CNT   FROM   (select   zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,3,fxsj_by1,sysdate   ,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS      
  from   view_fxsjcx   where   length(fxsj_sj)>0     and     fxsj_rq   between'2006-03-14'     and   '2006-03-14'     and   zzbm_mc   in   ('常压','催化','电精制','气分','加氢精制','重整','聚合','制硫','酸性水','油品气柜','小气分','产品质量数据','原材料质量数据')     and   fxsj_by1     in(   select   fxsj_by1   from   view_fxsj   where     length(fxsj_sj)>0   and   fxsj_rq>='2006-03-14'   and   fxsj_rq<='2006-03-14'   and   fxsj_hgbz='0')   order   by     ZZDYYP_IDS  
  )  
   
  FOR   I   IN   1..TRUNC(CNT/500)+1   LOOP  
   
  insert   into   qa_data_tmp1(zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,searchid,tmp_yph,tmp_date,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS)    
  select   zzbm_bm,ypbm_bm,fxxmbm_bm,fxsj_rq,fxsj_cysj,fxsj_sj,fxsj_bz,fxsj_hgbz,fxsj_ids,fxsj_hgz,3,fxsj_by1,sysdate   ,ZZBM_MC,YPBM_MC,FXXMBM_MC,YPBM_LB,YPBM_BY2,YPBM_XSXH,FXXMBM_DW,FXXMBM_FL,FXXMBM_XSXH,FXXMBM_BY2,ZZBM_XSXH,ZZDYYP_IDS      
  from   view_fxsjcx   where   length(fxsj_sj)>0     and     fxsj_rq   between'2006-03-14'     and   '2006-03-14'     and   zzbm_mc   in   ('常压','催化','电精制','气分','加氢精制','重整','聚合','制硫','酸性水','油品气柜','小气分','产品质量数据','原材料质量数据')     and   fxsj_by1     in(   select   fxsj_by1   from   view_fxsj   where     length(fxsj_sj)>0   and   fxsj_rq>='2006-03-14'   and   fxsj_rq<='2006-03-14'   and   fxsj_hgbz='0')   order   by     ZZDYYP_IDS;  
   
  COMMIT;  
  END   LOOP;  
  END;  
  Top

20 楼hsgzs(雾尘心)回复于 2006-03-16 14:31:56 得分 0

决定不用视图了,直接插表,速度终于起来了,2秒左右,谢谢各位大大了,送分Top

21 楼ming500(ming500)回复于 2006-03-16 23:19:25 得分 0

把   where   条件中的   in   ()   放到   where的后面,别放到整个sql语句的后面。试试。Top

相关问题

  • Com连接速度很慢?
  • 为什么速度很慢?
  • ADOQuery的速度很慢
  • sql-server200运行速度很慢
  • 我在dreaweaver里插入flash,preview时很慢很慢
  • 为什么这一阵子CSDN的速度很慢很慢!
  • 连接mysql速度很慢,为什么??
  • OUTLOOK访问EXCHANGE的速度很慢
  • 求助:GetPixel和SetPixelV速度很慢
  • oracle速度很慢,高手看一下。

关键词

  • 聚合
  • 数据
  • 质量
  • 原材料
  • view
  • fxsj
  • fxxmbm
  • zzbm
  • ypbm
  • rq

得分解答快速导航

  • 帖主:hsgzs
  • mosquitoxh
  • cenlmmx

相关链接

  • Oracle类图书

广告也精彩

反馈

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