我有一张表 大约有2千万条数据,表中有一个栏位是记录插入的时间。
现在查询要求返回时间最近的前100条结果
SQL:如下 请问怎么优化
select names
  from (select names,t_date from a order by t_date  desc )
 where 
 rownum <= 100

解决方案 »

  1.   

    分析函数
    select names,t_date
    from
    (
       select names,t_date,dense_rank()over(order by t_date desc) rn from tab1
    )where rn<=100--考虑有时间有重复,所以用 dense_rank() 如果没有,可以用 row_number()
      

  2.   


    但是这样我按F5分析感觉效率还没有用order by高
      

  3.   

    你排序速度肯定会很慢,2千万里面只找100条数据,当然会很慢了
    建议写PL/SQL
    考虑(1)拿程序来举例,假如有一个两千万的无序数组中,那么我要找前100条;
        (2)假如有一个两千万的无序数组中,我找第k小(大)的数据。
      

  4.   

    别的看不出来,可是子查询里的order by t_date  desc 绝对是没有意义的