我有一张数据量大概在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累计记录多了以后,这个过程会变的越来越慢.希望有高手能指条好方法.
这张表里有很多记录其编码(假设叫: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累计记录多了以后,这个过程会变的越来越慢.希望有高手能指条好方法.
可能你最新的数据,ROWID可能很小,也有可能很大
游标都是用在需要根据每条纪录的值,做比较复杂的不同工作
而你这个只是判断目标表中有没有,只要一个no exists就可以判断了
去学习下块的pctfree和pctuse的概念就知道为什么了