SQL问题,怎样根据日期字段取得最新的n条数据?

ozw 2002-04-09 10:42:53
为了取得最新的100条数据,先排序,再取最初的100条数据,如下:
select * from
(
select
f_a,f_b,f_date
from
tb1
order by
f_date desc
)
where
rownum<100

可是tb1中有上百万条数据,速度不能忍受
谁能提供更好的方法?
...全文
146 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
thingsfly 2002-04-09
  • 打赏
  • 举报
回复
做表分析啊。
analyze table tb1 estimate statistics;
或许有效的。
反正我使用这种方法每次都能提高不少性能!!
ozw 2002-04-09
  • 打赏
  • 举报
回复
经过确认,该日期字段有索引
但是怎样才能更快一些?
select /*+ INDEX_desc(tbl idx1) */
f_a,f_b,f_date
from
tb1
order by
f_date desc
这其中的注释部分起什么作用吗?
sxjgq 2002-04-09
  • 打赏
  • 举报
回复
建立索引的权限都没有?那就比较惨了,
建立索引用create index idx1 on tbl(f_date);
cutekid 2002-04-09
  • 打赏
  • 举报
回复
select top(n) *
from table
order by date desc;
ozw 2002-04-09
  • 打赏
  • 举报
回复
sxjgq说得没错,但是现在的表没有该字段的索引(表是现成的,我无权修改),所以还要请教。

hrb_qiuyb的方法有问题,这是先取100条,再排序。
hrb_qiuyb 2002-04-09
  • 打赏
  • 举报
回复
SELECT * FROM test_table
WHERE rownum<=100
ORDER BY col_date desc;
sxjgq 2002-04-09
  • 打赏
  • 举报
回复
在f_date 字段上建立索引,idx1
select /*+ INDEX_desc(tbl idx1) */
f_a,f_b,f_date
from
tb1
order by
f_date desc
ozw 2002-04-09
  • 打赏
  • 举报
回复
谢谢
我这就给分
thingsfly 2002-04-09
  • 打赏
  • 举报
回复
应该是

select /*+ INDEX_desc(tbl idx1) */
f_a,f_b,f_date
from
tb1
where rownum<100

thingsfly 2002-04-09
  • 打赏
  • 举报
回复

select /*+ INDEX_desc(tbl idx1) */
f_a,f_b,f_date
from
tb1
order by
f_date desc
那不是注释,那是HINT,可以提高你的查询性能.
这种方法不错的啊.其中的idx1是你的f_date字段的索引名.
ozw 2002-04-09
  • 打赏
  • 举报
回复
我想知道的是,可不可以不用嵌套查询,而直接查询出最新的100条数据?
wylyf 2002-04-09
  • 打赏
  • 举报
回复
这么简单的语句再进行优化恐怕是很难了吧!
只能从表的存储结构上下手了吧!
ozw 2002-04-09
  • 打赏
  • 举报
回复
cutekid的方法是针对SQLServer的
我现在用的是oracle

2,598

社区成员

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

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