日期:2014-05-17  浏览次数:21017 次

求批量插入sql优化方法

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上执行的
------解决方案--------------------

--这是戴大大的原创,你可以参照下,趁着戴大还没来,我偷偷的转
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