我有一张数据量大概在300万条左右的表(假设叫:tableA),并且以后也有持续增加的可能.
这张表里有很多记录其编码(假设叫:colID)是相同的,可是其内容是根据时间记录了colID对应产生变化的值(没有明显的时间字段,可能可以用rowid来排定先后顺序,假设有时间字段也可以..ORZ).
现在我的目的是:把这些记录挪到另一张表(假设叫:tableB),可是每个colID对应的记录只保留一条记录,而这条记录保留了最新的变化.
(数据库是ORACLE 9,做存储过程处理)
我现在的做法是定义游标 cursor curA is select * from tableA
然后 LOOP 
fetch curA into row_curA
每条记录都根据colID去SELECT tableB where colID=row_curA.colID
如果找到有值就更新,如果没有就INSERT.(这个过程我COUNT(*)过,也用游标做过)我会用的方法都很普通,当tableB累计记录多了以后,这个过程会变的越来越慢.希望有高手能指条好方法.

解决方案 »

  1.   

    rowid不是按时间来更新的
    可能你最新的数据,ROWID可能很小,也有可能很大
      

  2.   

    不过,假设你有办法找出最新的一条纪录,也不需要用游标处理,一般来说都不用游标的地方就不要用游标
    游标都是用在需要根据每条纪录的值,做比较复杂的不同工作
    而你这个只是判断目标表中有没有,只要一个no exists就可以判断了
      

  3.   

    谢谢hebo2005 的指教,其实记录是有时间的,只是由于日终问题,时间戳很多都是一致的...如果修改和删除的操作相同的话,难以判断先后,所以误以为ROWID可以..
      

  4.   

    对于新的数据库来说,ROWID基本上是顺序增长的,不过时间长了就不是的
    去学习下块的pctfree和pctuse的概念就知道为什么了