Oracle数据库中排序列值相同时,省略后续排序字段的默认排序行为是什么?
Oracle中排序列值全部相同时的默认排序行为
当你省略ORDER BY子句中的id ASC,仅保留ORDER BY modified_date ASC,且所有modified_date的值完全相同时,Oracle数据库不会保证任何固定的返回顺序,结果的行排列是不可预测的。
具体来说:
- 没有明确的次级排序指令时,Oracle会根据查询执行计划的实际情况返回数据——比如可能按照数据在磁盘数据块中的物理存储顺序(对应
ROWID的顺序,但这并非绝对规则),或是基于查询时用到的索引、临时哈希表等执行路径的差异来输出。 - 这种情况下,返回的id顺序可能和你原始表中的顺序一致,也可能完全不同;甚至在不同的执行次数、数据库版本、服务器资源状态下,同一查询的返回顺序都可能发生变化。
举个例子,你原始表的id顺序是5、1、2、22、4、3,如果仅执行SELECT * FROM my_table ORDER BY modified_date ASC;,有可能返回的id顺序和原始表一致,也可能是其他任意排列,Oracle不会对此做出任何承诺。只有当你明确指定id ASC作为次级排序条件时,才能保证在modified_date相同的情况下,结果按id升序排列。
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

