select a,b,c from (select a,b ,c,row_number()over( order by (b/a)*1.314 desc) rn from test) where rn<1000
目的就是想去 test表里面的(b/a)*1.314最大的1000列。
由于order by 里面带表达式,导致查询效率极低。有没有什么办法可以优化下。谢谢。 

解决方案 »

  1.   

    select a,b,c from (select a,b ,c,(b/a)*1.314 d,rownum rn from test order by d desc) where rn<1000;
      

  2.   

    没啥好办法,除非你有一列专门记录 b/a,将这个计算分散到插入和修改数据当中去。
    可以建个trigger在插入和修改时取值。
      

  3.   

    谢谢两位回复。
    2楼的方法是不能改善效率的,计算汇总是用不了多少时间,但是一ORDER,就要发很多时间。3楼是个迂回的方法。以空间换时间。对于多次查询的话有优势。不过我想也没其它好办法了。。