顶,这个问题我很感兴趣!
----------------------------
               CSDN一号机器人

解决方案 »

  1.   

    select * 
    from 
           (select * ,rownum rid
             from Table(表名) where Condition(条件)
           )
           t
    where rid between 10 and 1000
      

  2.   

    谢谢两位大虾的指导。不好意思问题描述有遗漏:
    实际上,sql语句还需要加上一个排序的子句。现在的测试表明,瓶颈就在order by上面。如何解决?
    select * 
    from (select rownum as rid 
          from 
           (select * 
             from Table(表名) where Condition(条件) order by field1(字段名)
           )
          )
    where rid >= 10 and rid < 1000;
      

  3.   

    建立索引:
    create index ind_field  on tbl(field1);
      

  4.   

    select * from 
    (select rownum as rid 
    from Table(表名) where Condition(条件) order by field1(字段名))
    where rid >= 10 and rid < 1000;
      

  5.   

    建立索引
    create unique index ind  on Table(col1,col2);
      

  6.   

    关于sql语句优化和性能的问题,我一直在研究,发现有些我测试得到的结果和网上,书上说的并不一样.但是我也还不确定.可以讨论一下: [email protected]
      

  7.   

    a.建立索引:create index ind_field  on tbl(field1);
    b.你可以在PL/SQL工具得SQL分析一下。看还有瓶颈不
    c.可以在SELECT 后面加上  /*rule*/ 试试如果还没什么改善得话,就这样了.关于SQL得优化,除了书上基本得优化措施外,还是多试试,有些SQL并不象你想象的和书上说的那样,让人莫名奇妙的,看来只有ORACLE心里自己清楚了。
      

  8.   

    建立索引
    create unique index ind  on Table(col1,col2);
      

  9.   

    除了建立索引,试试
    select rownum as rid,a.*
    from Table(表名) a where Condition(条件) and rownum >= 10 and rownum < 1000  order by a.field1(字段名))
    to:dinya2003(OK) 有空可以交流一下SQL优化心得,我的msn是;[email protected]
      

  10.   

    不要这么写,这样写的效率肯定很低。用MINus因为,你首先选出了所有的合适的记录,假如用minus,就不是这样子的了。
    请上面认为这句句子没有什么可以改善的人,好好的学习,不要误导别人。
    解决的方法不是只用INDEX。
      

  11.   

    没想到,你居然是NEC的人,赫赫。中国什么地方的NEC呀?
      

  12.   

    select * 
    from (select rownum as rid 
          from 
           (select * 
             from Table(表名) where Condition(条件) order by field1(字段名)
           )
          )
    where rid >= 10 and rid < 1000;考虑改成
    select * from (select * 
             from Table(表名) where Condition(条件) order by field1(字段名)
    ) where rownum<1000
    minus
    select * from (select * 
             from Table(表名) where Condition(条件) order by field1(字段名)
    ) where rownum<11;
      

  13.   

    数据量大的话,用minus好不好?
      

  14.   

    where Condition(条件) and rownum >= 10 and rownum < 1000  
    执行的时候会首先过滤掉<1000的所以这个句子没有必要用minus吧
      

  15.   

    建议在select的时候最好把字段名列出来,这样可以节省一些oracle内部的分析sql语句时间,还有就是给你要查询的字段建立索引,索引字段不能是可以为null的,否则索引不起作用
      

  16.   

    jackjingsg(飞翔的精灵) :你的想法错掉了,他最后需要的是10-1000范围内的数据,但是,由于还有其他的条件,所以,不能放在他的条件里面,否则,就变成,10-1000内,符合的条件了。
    不是符合条件的10-1000条。
      

  17.   

    to: Croatia(Croatia) :通过测试的情况看rownum指的是结果集中的行号,而不是对表中各行直接编号。
      

  18.   

    jackjingsg(飞翔的精灵) 
    想实现你的要求,简直易如反掌。
    使用rowid。
      

  19.   

    Croatia 可能是Mirocsoft 的人,要不然沒有這麼"牛".
      

  20.   

    尽可能的先select 然后再order
      

  21.   

    呵呵 即使ms的人对orale可能也不是很熟悉
      

  22.   

    用UP
    GZ吧
    呵呵
    up一把
    gz一把
      

  23.   

    select * 
    from (select t.*,rownum rid 
             from Table(表名) t where Condition(条件) 
          )
    where rid >= 10 and rid < 1000 order by rid