1.对于一个要经常大量查询的表怎么做可以让它能比较快的查出自己所要的数据?
2.大型的表(200w),如果要删除/修改其中的100w,怎么做才会不影响数据库的正常工作?

解决方案 »

  1.   

    1.对于一个要经常大量查询的表怎么做可以让它能比较快的查出自己所要的数据?根据实际的sql语句,创建相应的索引
    如果查询结果占总数据量的50%以上,那就屏蔽索引
    定期分析表,为oracle优化器提供明确的统计信息2.大型的表(200w),如果要删除/修改其中的100w,怎么做才会不影响数据库的正常工作?最好把需要保留的数据 create table new_table as select * from old_table where ..
    然后 truncate table old_table;
    然后 insert /*+append*/ into old_table select * from new_table;
    commit;
      

  2.   

    1.对于一个要经常大量查询的表怎么做可以让它能比较快的查出自己所要的数据?
    大量查询,单单建立一个索引好象是个好的办法,
    你看这个是一个方法不,从表的创建开始考虑:
    主表建立在多个表空间的基础上,即. 将表分割,数据就同时分割了,这样查询就可以减少I/O进程。
    2.大型的表(200w),如果要删除/修改其中的100w,怎么做才会不影响数据库的正常工作?“ truncate table old_table”
    这样做不会影响工作的正常运行吗??
    不是个好办法吧!
      

  3.   

    对于问题1,楼主的想法和分区表的思路相似,但是前提是你说的那个经常查询的表是个数据量很大的表,否则对于小表采取分区技术反而会使性能下降。可以参考 Oracle读书笔记-分区表
    http://www.meno.com.cn/IT/oracle/ziliao/200501/312.html对于问题2,想对大型的表进行操作,同时不对数据库影响——不明白楼主什么意思,是觉得遗漏说的truncate后在insert的方式降低了数据库的运行效率,还是说影响了日常业务系统的数据连贯性,导致当时无法运转了?200W不是很大的,所以如果白天一直应用,考虑夜间进行1楼说的操作。  至于对200W的表要进行一般数据的update,还不想影响这张表的访问,没有什么办法吧?或者你备份后,对备份的表进行100W次以上的update?
      

  4.   

    1. 除了建索引,分析表,还要分析索引,索引列,加大各种_area_size,加上并行等等,实在太多的因素有影响.
      其实如果这个表如果增加修改等操作很少的话,我还是建议你可以建物化视图来解决,针对不同的条件可以建立几个MV2. 你要删除/修改一般的数据,不影响数据库的正常工作是不可能的.