老问题:oracle中百万条记录的表,排序后取前几行的最优解决办法?

格利高里 2002-02-25 01:50:00

这个问题一直没有很好的解决,rowid 可是先取后排序。

...全文
517 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxc 2002-03-03
  • 打赏
  • 举报
回复
程序员增刊中有关于TOP-N查询的文章,不过我在使用RANK()时,总报"OLAP 功能没有启用",不知怎么回事?
hrb_qiuyb 2002-03-02
  • 打赏
  • 举报
回复
使用rownum便可以
leio 2002-03-02
  • 打赏
  • 举报
回复
如果不考虑用一条SQL语句实现。可以建个过程/函数,用游标方式取数据,比上面的SQL语句应该快一些。
leio 2002-03-02
  • 打赏
  • 举报
回复
SELECT * FROM (SELECT * FROM MYTABLE ORDER BY ORD_COL DESC) WHERE ROWNUM<=N
只能这样实现了。虽然这样的效率并不高(先遍历了所有记录再筛选),但好象目前没有更好的办法。
johnage 2002-03-02
  • 打赏
  • 举报
回复
select * from yourtable where rownum < 2
smartdonkey 2002-03-01
  • 打赏
  • 举报
回复
我的解决方法是:
首先你按那些字段排序:
比如:安col1,col2排序
在col2,col2上建立索引
比如:你的表如下
create table mytable(col1,col2,col3,col4.....)
在你表中加上一列
alter table mytable add x_id int;
update mytable set x_id=1;
这一列全都是1,
然后在x_id.col1,col2上建立索引
create index ix01_mytable on mytable(x_id,col1,col2)

使用数据库提示
select /*+ index_desc(mytable ix01_mytable)*/ from yourtable where x_id=1
ok?

rabbit 2002-02-26
  • 打赏
  • 举报
回复
你是怎么写的?
看看能不能加上并行处理。等优化技术。是在主关键字上排序吗
alldog 2002-02-25
  • 打赏
  • 举报
回复
用rownum不可以吗??

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧