优化Sql语句,最好不要用循环,我一般是一条Sql语句搞定

解决方案 »

  1.   

    用sqlloader进行insert操作,错误的记录自动保存在bad文件中,你可以再执行update
      

  2.   

    注意分析执行时间在哪里减慢了,是越往后面越慢表示是事务问题,请部分提交事务,比如100条一次,或者干脆取消事务,但也不排除索引原因;
    如果是UPDATE部分特别慢,那么在UPDATE前建立索引。
    其实速度与INSERT+UPDATE式操作没有直接联系。
      

  3.   

    INSERT /**APPEND*/DELETE (某字段)存在于索引表的,再INSERT /**APPEND*/索引表 到
      

  4.   

    sun9989,能不能解释一下你的SQL+HINT,应该是HINT吧?
      

  5.   

    你的表是有索引的,所以HINT不起作用。
    如果你的表是分区的,哪么可以新建一个分区,再建一个结构一样的TMP表,
    没有索引,往TMP表中导数据。删除你的表中与TMP表有重复的数据(慢在此处),
    把TMP表与新建的分区做物理交换(EXCHANGE)(速度快),
    再给你的表的分区作LOCAL INDEX
    但操作要多点。对于特大的表,导入数据,或从结构相同(没有索引)的小表提取数据,
    就是对大表分区,“直接导”入小表,分区与小表交换。
      

  6.   

    假设有两个表,table1,table2如果要把table2的数据插入或更新到table1
    我想你可不可以先在table1查询和table2中含有相同id的记录,查询到后删除,接着再插入所有数据
    delete from table1 where id in(select id from table2)---删除
    insert into table2 (select * from table2)
    ----插入
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    如有好的办法,我也想知道,