字段  A(唯一),B,C
插入要求: 30分钟 插入500W条
查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.帮A加索引  500W条数据在30分钟内无法完成插入.
不加索引   无法实现0.2秒内完成查询.目前我的解决方案加索引,分表。 控制表中的数据不超过100W。   但觉得 这个方案太笨, 
各位大侠有更好的方案吗(列存储就算了,版本太老,不支持).

解决方案 »

  1.   

    500W条记录,30分钟插入应该没有问题。建议你看一下插入时候的等待,为什么没完成插入操作。
    对于索引,可以用1楼的方法,先失效,再生效。
    还可以把索引换成nologging模式
      

  2.   

    大量数据插入,考虑楼上说的使用nologging模式,减少redo日志,可以加快速度,
    但必须要注意数据库归档模式,nologging在归档模式下要并行加载append的时候才有效
      

  3.   

    這個方案如何?
    用物化視圖,源表上沒有index,快照視圖上建立index
      

  4.   

    插入数据前把索引删除。插入数据时用不写日志的方法,当然还有oracle的一些暗示的方法。数据插入完成后,在重建索引。
      

  5.   

    LZ的意思是insert和select是并行的吗?
      

  6.   

    1)LZ 能把大概的业务介绍一下吗?大体是该业务表主要是做什么用的?
    2)能把之前insert和select的执行计划贴上来看看吗?这样有助于分析慢在哪
      

  7.   

    APPEND nologging插入,然后建索引
      

  8.   

    用了1楼的方法, 对500W数据 建立索引 需要5分钟左右时间。时间太长。这段时间查询会很卡。具体情况是这样的, 平均每天的数据插入量是500W条。同时必须满足查询速度在0.2秒一下。
    PS 系统 是7*24小时的。    
      

  9.   


    这个是可以实现的,因为他的查询要求可能仅仅是一条,或者某个范围的数据,而不是500W条查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.
      

  10.   


    这个是可以实现的,因为他的查询要求可能仅仅是一条,或者某个范围的数据,而不是500W条查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.恩,这样是可以