1。不太懂意思,order by 为什么不能用?
2。默认按rowid排序。

解决方案 »

  1.   

    to  nmgyjw(袁继武) :
    我想也可能是跟ROWID有关,那么ROWID是顺序增加的话,SELECT出来的数据也应该是顺序的吧。
    我记得曾经在那本书上看到过,讲永远都不要期待SELECT出来的顺序是和数据插入顺序有关……
    当然,oracle有记录唯一标识符Rowid,但是其他DBMS呢?比如SQL Server, sybase呢?不知道是按什么排的,也许也有一定的内部机制。单位有oracle,可惜上班没来得及验证我的想法(关于RowID),现在在家,手头上又没有oracle可以试。
      

  2.   

    下了一个通宵,Oracle 还是没有下下来(太大了~)。刚问了一个网友,他说和Index也有关系,对此我有点怀疑,Index应该只是对检索有效率影响,对select 来说,他的影响(或许有那么一点)应该是透明的吧。
      

  3.   

    对于一般的情况 不使用order by 字句 而且 没有索引,那么,数据是直接按照ROWID排序输出的。事实上,不使用order by 子句,就意味着oracle根据取得数据的先后来输出数据,因此,如果内部机制的不同可能带来不同的输出顺序,不同的解释计划也可能导致输出顺序的不同,Index的影响当然也是有关系的,oracle用到了相关的索引那就会以这个索引来取数据,对于索引来说也是有顺序的。to:DD88(程序设计中...) 
    ROWID不是一直顺序增加的,但是ORACLE在检索数据的时候一定是要有一个顺序去做的,这个顺序的依据就是ROWID,数据的物理存储位置。其他的数据库也是一样的,有可能不会暴露物理存储地址,但是检索的时候是一定会按照这个地址为检索的顺序依据的。 所以,十分认同不要期待SELECT出来的顺序是和数据插入顺序有关,当然是无关的,oracle自己会安排把数据放到哪里,所以,你永远也不知道检索出来的数据的顺序是什么。
      

  4.   

    我同意 doulikeme(来去无踪)这位仁兄的意见呀!但是希望下次大家提出意见后,能留下联系方式 ,这样以便日后沟通呀!
      

  5.   

    to doulikeme(来去无踪) 兄:
       那么这样说的话,如果要达到用select出来的顺序是按主键顺序排列的话,是不是就没有办法了?   另,能否稍深入点谈谈index对select排序的影响呢?对这个有些好奇。:)   谢谢!to nmgyjw兄:
       加了你QQ,但是我白天上班无法上网,只能等晚上下班后才能上网了。:)
      

  6.   

    to  DD88(程序设计中...) :
    在没有指定 order by 子句的话, ORACLE返回数据的顺序是根据取得数据的先后顺序的,因为任何的排序都是需要代价的,所以如果不指定order by,oracle是不会做任何顺序上的处理的。
    至于index的影响就是影响oracle获取数据的方式,如果oracle按照某个索引的顺序去去数据的话,那就是所谓的按照索引排序,但这个也并不是必定的,直接取决于oracle内部怎么处理,所以,如果要排序,指定order by。
      

  7.   

    to 来兄
        谢谢你的解释。比较理解了。感谢感谢!:)to 袁兄
        我们单位管得严啊,连带红外线的手机都不能带近公司,上网就更不可能了。所以只能回家才上网了。有事我给你留言。:)