需要楼主说清楚些,是NUMBER1的值在1000以外还是number1的值按从小到大的顺序排列后1000个以后的不要?
如果前都那就简单了,
create table b as select * from a where number1<1000
drop table a
rename b to a
如果是NUMBER1排名1000的话不管怎么做已经肯定会table access full的,现在的问题是怎么才能使其order时快些,delete时快些。
select * from
(select row_number() over(order by number1) n,a.* from a ) t
where t.n<=1000
上面的语句我在一个一千三百万记录数的表中测试过只需要70s左右
注:凡是使用rownum语句作为排序条件都不对,rownum是对表访问过的记录数。
hehe ,尝试一下
1. create table tab_1 as select * from (select * from tab_1 where char1 = 'AAA' order by number1) where rownum <= 1000 ;
2. delete from A where char1 = 'AAA'; commit ;
3. insert into A select * from tab_1 ; commit ;
还有字段CHAR2='AAA'的判断条件,不是所有记录,所以一楼的先查询->TRUNC->插入的方法不是很理想.NUMBER1没建索引(CHAR2已经是索引被用上)
To;derris(深水鱼) ( ) 信誉:100 ,你的语句应该不对,你可以做试验证明:
select * from biao where rownum <= 1000 order by number1
顶一下,看看有没有高手给一个比较妥当的方法.
还有字段CHAR2='AAA'的判断条件,不是所有记录,所以一楼的先查询->TRUNC->插入的方法不是很理想.NUMBER1没建索引(CHAR2已经是索引被用上)
To;derris(深水鱼) ( ) 信誉:100 ,你的语句应该不对,你可以做试验证明:
select * from biao where rownum <= 1000 order by number1