有表A(char1,number1),记录巨多,求一SQL语句实现: 删除NUMBER1排名1000外的所有记录.
解决方案 »
- 关于 ROWNUM 分页查询语句的问题
- 请问这样一个PROCEDURE 怎么创建才算好?
- 如何编程得到指定数据库中各个表的建表语句,在线等....
- 程序全局区PGA的大小在哪儿调整?
- 请问:什么是缓存级别的锁?什么是数据库级别的锁?
- 关于数据库的效率问题和函数执行顺序问题!!!!!!!!
- oracle 10g中create function出现Statement ignored错误,大家帮下忙啊!
- oracle中的clob问题
- 请指教:关于Oracle文档?
- 我机器上的 sqlplus 无法使用了,狂奇怪的问题!!!
- 我在oracle的查询分析器中执行存储过程,报错了,求大师指点迷津!!
- 如何在一个包体内调用此包体内的另一个过程?
insert into a_temp select * from a where rownum <= 1000 order by number1 ;truncate table a;
insert into a select * from a_temp;
commit;
truncate table yourtable
To;derris(深水鱼) ( ) 信誉:100 ,你的语句应该不对,你可以做试验证明:
select * from biao where rownum <= 1000 order by number1
To;derris(深水鱼) ( ) 信誉:100 ,你的语句应该不对,你可以做试验证明:
select * from biao where rownum <= 1000 order by number1
顶一下,看看有没有高手给一个比较妥当的方法.
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 ;
如果前都那就简单了,
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是对表访问过的记录数。