问题如标题,比如有如下SQL:
select * from t order by t.a,t.b,t.c;
在t.a,t.b,t.c三个字段都相同的情况下,Oracle会如何排序?
另外,sqlserver数据库在这种情况下又是如何排序的?

解决方案 »

  1.   

    顶楼上,可能是按照rowid来排序的,这么做的代价会少点,其实可以做个小测试看看
      

  2.   

    按照rowid来排序的,大部分是按照插入时间顺序,极少数由于dml操作导致数据块变化
      

  3.   

    默认情况下,不写order by相当于按rowid排序。按相等字段排序应该会进行某种不稳定排序算法进行排序,并不是按rowid
    delete之后再插入相等的数据也会改变排序,推测是与物理存储位置有关。再深入下去就没意思了,上面两点已经可以说明oracle排序的“随机性”。特别是oracle本身也没有公开order的具体算法,不同情况下可能有不同的算法。