oracle 数据库查找前几条数据

xdshen 2009-04-08 09:22:01
1、select * from News where Ispublished=1 and rownum<=10 order by Publisheddate desc
这样查出来的话是先查出前10条数据再排序,不符合我们的要求。

2、select * from (select * from News where Ispublished=1 order by Publisheddate desc) where rownum<=10
这样查出来符合我们的要求,但是它的实现原理是不是把所有的数据查出来,再取出前10条数据.如果是这样的话,当这张表的数据很多的话,它的执行效率会不会很低?有没有什么更好的方法,能保证效率,又能查出前10条数据????

帮帮忙~~~~~~
...全文
1791 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hwlxjh 2010-04-26
  • 打赏
  • 举报
回复
那你可以这样写:
select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum <= 10) where rn >= 1;
如果要有数据已被删除可以先进行排序再查询
select * from (select a1.*,rownum rn from (select * from emp order by empno) a1 where rownum <= 10) where rn >= 1;
这样就不是查询所有记录而再取前10条,可以对次语句进行封装为通用的。
yushu2008 2009-04-09
  • 打赏
  • 举报
回复
如果你用的是自动序列可尝试

select * from 表名 where 自动编号字段<=n
select * from news where id<=6
hebo2005 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pinklotus 的回复:]
用分析函数应该会比较快点
[/Quote]
一样的
pinklotus 2009-04-08
  • 打赏
  • 举报
回复
用分析函数应该会比较快点
wangsong145 2009-04-08
  • 打赏
  • 举报
回复
我只知道第二种方法,帮顶
hjianke 2009-04-08
  • 打赏
  • 举报
回复
有点困难啊,帮顶
阿三 2009-04-08
  • 打赏
  • 举报
回复
应该用第二种方法来查,因为rownum是一个变化的数
xdshen 2009-04-08
  • 打赏
  • 举报
回复
Publisheddate 不是索引,这样查的话感觉效率会低点,但是如果不这样做的话,有什么办法可以查出前几条数据呢
yhuib 2009-04-08
  • 打赏
  • 举报
回复
如果Publisheddate 是索引的话效率应该不会低
changlang 2009-04-08
  • 打赏
  • 举报
回复
个人认为设置游标,选取前十个。这样就不必全部排序,效率会提高很多
不过,排序的过程需要自己写··
Angly1018 2009-04-08
  • 打赏
  • 举报
回复
学习
Angly1018 2009-04-08
  • 打赏
  • 举报
回复
学习
cheng_fengming 2009-04-08
  • 打赏
  • 举报
回复
第一条语句应该是先取出记录满足Ispublished=1里面的10条记录,再进行排序;
第二条语句时先查询满足Ispublished=1的记录,排序,再取前10条;
如果一定要对大容量数据进行这样的操作的话,考虑先建个索引!
Allan_xd 2009-04-08
  • 打赏
  • 举报
回复
当然,如果用游标的话rownum <=10的条件就不用写了。
Allan_xd 2009-04-08
  • 打赏
  • 举报
回复
该过滤过滤,该排序排序,只要把它放在一个游标中,只取10次记录即可。
wojiaochenglong 2009-04-08
  • 打赏
  • 举报
回复
应该没有什么其他方法了
justin_wkf 2009-04-08
  • 打赏
  • 举报
回复
應該是第二種方法
wdmcsoMSDN 2009-04-08
  • 打赏
  • 举报
回复
关注
xdshen 2009-04-08
  • 打赏
  • 举报
回复
如果这样的话,那这是不是Oracle的不可取之处?在SQL server里,还有像 select top 10 * from News 类似的写法。
randy_ideal 2009-04-08
  • 打赏
  • 举报
回复
应该没有什么好方法,只能采用类似楼主第二种方法的写法

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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