for(){   // 10000+
insert_sql =
                        " insert /*+append */ into RPTBOSJTEST(DWZD_BH,BBZD_BH,BBZD_DATE,HZD_ZB,LZD_ZB,DYZD_SJ,DYZD_DATA,DYZD_FLAG,H_BZBM)"
                        + " values('"+DWZD_BH+"','"+BBZD_BH+"','"+BBZD_DATE+"', "
                        + HZD_ZB+ ","
                        + LZD_ZB+ ","
                        + " '"+DYZD_SJ+"', "
                        + DYZD_DATA +","
                        + 0 + ","
                        + " '' )" ;
                bost.addBatch(insert_sql);
                num ++ ;
                if(num == 500){
                    bost.executeBatch();
                    bost.clearBatch();
                    num = 0 ;
                }
循环插入 大约有10000条插入操作的时候 需要3分钟
做法是 每500条 插入一次
太慢 。 求优化方法 
在 sybase12.5上执行的

解决方案 »

  1.   


    --这是戴大大的原创,你可以参照下,趁着戴大还没来,我偷偷的转
    Oracle 插入大量数据 收藏1. 采用高速的存储设备,提高读写能力,如:EMC 和NetApp,2. 假如tab1表中的没有数据的话 
    DROP   TABLE   TAB1;
    CREATE   TABLE   TAB1   AS   SELECT   *   FROM   TAB2;
    然后在创建索引3. 用Hint 提示减少操作时间    INSERT   /*+Append*/   INTO     tab1
                    SELECT   *   FROM   tab2;4. 采用不写日志及使用Hint提示减少数据操作的时间。建议方案是先修改表为不写日志:
    sql> alter   table   table_name   NOLOGGING;插入数据:INSERT   /*+Append*/   INTO     tab1
          SELECT   *   FROM   tab2;插入完数据后,再修改表写日志:
    sql> alter   table   table_name   LOGGING;这里的区别就在于如果插入数据的同时又写日志,尤其是大数据量的insert操作,需要耗费较长的时间。5. 用EXP/IMP 处理大量数据(1)给当前的两个表分别改名
    alter   table   tab1   rename   to   tab11;
    alter   table   tab2   rename   to   tab1;
    (2)导出改名前的tab2
    exp   user/pwd@...   file=...   log=...   tables=(tab1)
    (3)把名字改回来
    alter   table   tab1   rename   to   tab2;
    alter   table   tab11   rename   to   tab1;
    (4)导入数据
    imp   user/pwd@...   file=...   log=...   fromuser=user   touser=user   tables=(tab1) 
    http://blog.csdn.net/tianlesoftware/archive/2009/10/30/4745144.aspx
      

  2.   

    或者你可以google下data pump
      

  3.   

    ls的方法不太行啊 
     alter   table   table_name   NOLOGGING
    在我的sybase版本里也不能用
      

  4.   

    在java端用循环插入数据是快不起来的。
    批量插入数据,如果需要循环,尽量使用存储过程来完成吧。
      

  5.   

    到sysbase 去问吧oracle 是采用装载 跟你写的类似  把表 alter table tb nologging