oracle在排序字段都相同时按什么排序?

卜塔 2019-11-11 02:31:59
问题如标题,比如有如下SQL:
select * from t order by t.a,t.b,t.c;
在t.a,t.b,t.c三个字段都相同的情况下,Oracle会如何排序?
另外,sqlserver数据库在这种情况下又是如何排序的?
...全文
1299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2019-11-25
  • 打赏
  • 举报
回复
默认情况下,不写order by相当于按rowid排序。按相等字段排序应该会进行某种不稳定排序算法进行排序,并不是按rowid delete之后再插入相等的数据也会改变排序,推测是与物理存储位置有关。 再深入下去就没意思了,上面两点已经可以说明oracle排序的“随机性”。特别是oracle本身也没有公开order的具体算法,不同情况下可能有不同的算法。
stelf 2019-11-25
  • 打赏
  • 举报
回复
不一样呢,一个加了排序一个没有排序,看上去一样只是表象。
引用 7 楼 AHUA1001 的回复:
排序字段都相同,和不排序,应该是一样的。
AHUA1001 2019-11-25
  • 打赏
  • 举报
回复
排序字段都相同,和不排序,应该是一样的。
stelf 2019-11-25
  • 打赏
  • 举报
回复
所以说如果字段值一样,没必要去纠结它的排序问题。两种选择,1,根据业务规则再指定一个字段;2,如果不影响业务就随它去吧。
weixin_44671253 2019-11-22
  • 打赏
  • 举报
回复
随机排序的吧
AT152S 2019-11-22
  • 打赏
  • 举报
回复
建个表来测试一下不就知道了
riven2011 2019-11-15
  • 打赏
  • 举报
回复
按照rowid来排序的,大部分是按照插入时间顺序,极少数由于dml操作导致数据块变化
minsic78 2019-11-11
  • 打赏
  • 举报
回复
顶楼上,可能是按照rowid来排序的,这么做的代价会少点,其实可以做个小测试看看
weixin_40290083 2019-11-11
  • 打赏
  • 举报
回复
这个和存储的块可能有些关系,
stelf 2019-11-11
  • 打赏
  • 举报
回复
可能是随机的

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧