表中有50多万数据 查询速度极慢   请oracle高手帮忙解决下, 哪种方案比较合理   先谢谢啦。。  方案一:  
String  sql = "select a,b,c,d from abcd order by updatetime desc";  //50多万数据全部查出来了。  
List newList = intser.getlistBySQL(sql);  
List newUpdateList = newList .subList(0,17);  //页面只显示最新的16条数据。  
request.setAttribute("newUpdateList",newUpdateList);  // 最新更新的16条数据  向页面传值  
方案二:  
String  sql = "select a,b,c,d from (select a,b,c,d from abcd order by updatetime desc) where rownum  <=16 ";    
//50多万数据按更新时间全部查出来之后,再去前16条数据。  
List newList = intser.getlistBySQL(sql);  
request.setAttribute("newList",newList); // 最新更新的16条数据  向页面传值 

解决方案 »

  1.   

    方案一 将50万数据都读到内存中,在取前16行,你有多少内存可用?不可取;
    方案二 合理,就是分页查询,你这个sql只是第一页的,第二页的写法不一样;
      

  2.   

    因为你要查最新的,建议建立updatetime倒序索引尽量不用order by ,因为用order by 的话数据库就破坏了索引规则,也就是说用order by 的话所搜的时候数据库是不用索引的。
      

  3.   

    第二种方案好。
    可以对a,b,c,d,updatetime建索引
    但是索引建得过多会影响insert和update操作的性能
    然后再进行分页查询
      

  4.   

    不太认同。
    order by 使用索引是有条件的:
    1)ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.
    2)ORDER BY中所有的列必须定义为非空.
    3)另外,如果ORDER BY中的列在where 条件中出现,也会使用索引
      

  5.   


    怎样设置  statement缓冲池 ??