解决方案 »

  1.   

    1,我所了解的索引一般是建立在不常变更的表上面的,但是我们的表每天都会被truncate,这样是不是会影响效率?truncate有索引和没索引的表速度一样么?

    没有影响,truncate 有索引和无索引的速度是一样的,因为你的数据量比较大,建议你在重新写入数据后,收集下这几张表的统计信息。2,虽然我们的数据不是用insert到数据库的,导入数据会因为表有索引会对导入速度有影响么?顺便问下,如果insert到数据库,因为存在索引,是不是效率很低?
    有索引导入时,速度肯定要比没有索引要慢,具体慢多少取决索引的个数和索引关联列的个数。3,有没有什么其他好办法来提高效率。

    1.insert 时 可以加一个 /*+ append */选项
    2.1000W 的数据,建议分批导入,比如分成 100批次,每次提交10W 行。
    3.可以考虑,在insert 之前,把索引先干掉,再 append 到表中,导完后,再增加索引,再收集统计信息。
      

  2.   

    采用不写日志及使用Hint提示减少数据操作的时间。
    1)先修改表为不写日志
    sql> alter   table   table_name   NOLOGGING;
    2)插入数据:
    INSERT   /*+Append*/   INTO     tab1 
          SELECT   *   FROM   tab2;
    3)插入完数据后,再修改表写日志: 
    sql> alter   table   table_name   LOGGING;
      

  3.   

    楼上说的都挺好的,可以测试一下
    另外楼主的需求,也可以考虑通过dblink 建物化视图的方式~
      

  4.   

    您说的第二条的方法 是指我从原始表插入结果表的时候做么?我之前查到使用  /*+Append*/ 会使数据库很臃肿?这样做好吗?