关于Oracle中结果集数据的顺序问题,在《Oracle读取数据的顺序问题》中曾通过实验说明过,最近在整理一些案例,碰巧看到了这篇《Ordering of Result Data (Doc ID 344135.1)》,正如文中所说,强调一点,Oracle中数据检索没有默认顺序。

如果语句中没指定顺序,数据就按照读取数据块的顺序返回。像索引这种预先排序的数据源返回的就是有序的数据,像全表扫描这种返回的就是无序的数据。

如果SQL的执行计划改变了,就是数据访问路径改变了,数据返回的顺序,很可能就会不同。

如果想让Oracle返回有序的数据,唯一的操作,就是指定order by子句。如果你的程序中,没指定子句order by,他的返回顺序,不同的场景下,可能就是不同的,不可控,这是我们在开发过程中,需要注意的。

除此之外,有两个隐藏参数,可能会对一些结果的返回顺序产生影响,

1. _newsort_enabled

允许使用新的排序算法。11g下默认值是TRUE。

2. _gby_hash_aggregation_enabled

这个参数允许group by子句使用hash聚合而不是sort聚合。因为hash聚合不能保证返回数据的顺序,不同语句可能返回不同的顺序。11g下默认值是TRUE。这个问题很隐蔽,可以参考《Oracle不同版本group by的变化》,因为从10g开始,group by用了hash聚合,不是sort聚合,因此不会默认排序了,如果在9i,程序中没指定order by,在10g以上跑,结果就可能是个乱序的,我们就碰到过这个坑,记得入职改的第一个程序,就和这个相关。sort聚合毕竟涉及排序了,因此执行时间上,可能比hash聚合更久,但是hash聚合涉及的数据如果太多,据说会产生bug,此时可以通过调整这个_gby_hash_aggregation_enabled来解决。

Oracle就是个软件,有人说过,这些隐藏参数,其实相当于开发人员设置的各种debug开关,打开或者关闭,都对应到不同的代码逻辑,带来的效果,就是不同的。

近期的热文:

《2020数据技术嘉年华》

《MySQL异常访问的熔断机制》

《Oracle时间戳类型内部表示的转换方式》

《Oracle的批量插入操作》

《数据库结构文档的生成利器》

《主键约束索引的奇葩现象》

《如何判断应用系统性能好不好?》

《Oracle Cloud创建19c数据库》

《SQL工具集-格式化结果的SQL》

《如何捕获问题SQL解决过度CPU消耗的问题》

《如何查看JVM运行的堆内存情况》

《Oracle删除字段的方式和风险,你都了解么?》

《登录缓慢的诡异问题》

《公众号600篇文章分类和索引》

Oracle数据顺序问题相关推荐

  1. oracle数据块格式小结

    Oracle数据块可分为三层  更细化 Cache layer--20字节,包含DBA.块类型.块格式.SCN:数据块被读取时进行完整性检查,确保没有损坏或fracture,即块更新信息只有部分被写入 ...

  2. Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图、序列、索引等对象的导出,oracle完结,后续开启mysql的学习

    Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图.序列.索引等对象的导出,oracle完结,后续开启mysql的学习 2022找工作是学历.能力和运气的超强结合体,遇 ...

  3. Oracle数据库面试题 精选 Oracle 面试题

    Oracle数据库面试题 1.解释冷备份和热备份的不同点以及各自的优点 冷备份 发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法.适用于所有模式的数据库. 优点 1. 是非常快速 ...

  4. oracle怎么自定义排序,ORACLE自定义顺序排序

    ORACLE可以借助DECODE函数,自定义顺序排序: select * from ( select 'Nick' as item from dual union all select 'Viki' ...

  5. ORACLE 数据的逻辑组成

    数据块(block) Oracle数据块(Data Block)是一组连续的操作系统块.分配数据库块大小是在Oracle数据库创建时设置的,数据块是Oracle读写的基本单位.数据块的大小一般是操作系 ...

  6. ubuntu下oracle数据的导入,导入oracle数据库命令行

    Windows DOS窗体下Oracle 数据库的导入导出命令 oracle 用户创建 数据库的导入导出imp/exp 可以在SQLPLUS.EXE或者DOS(命令行)中执行 执行环境:可以在SQLP ...

  7. python使用pandas基于时间条件查询多个oracle数据表

    python使用pandas基于时间条件查询多个oracle数据表 目录 python使用pandas基于时间条件查询多个orcale数据表 #orcale数据连接

  8. oracle 数据导出

    oracle 数据导出 分类: oracle 2011-10-23 16:22 25人阅读 评论(0) 收藏 举报 方案一:使用SQLPlus的Spool命令.Spool是SQLPlus的命令,不是S ...

  9. oracle 数据泵导出简单使用版

    <oracle 数据泵导出简单使用版> 1.数据泵可以导出表,表空间,用户schema,数据库 注意:导出表空间和数据库要求用户必须具有DBA 角色或EXP_FULL_DATABASE 角 ...

最新文章

  1. 哪个websocket库与Node.js一起使用? [关闭]
  2. WebAPi添加常用扩展方法及思维发散
  3. 数据库连接池配置(案例及排查指南)
  4. 魔兽美服服务器维护,美服《魔兽世界》低人口密度服务器合并计划最新动态
  5. python就业方向-Python的5大就业方向,薪资诱人前景好!
  6. SQL Server 2005 Beta 2 Service Broker: Stored Procedure acts as a service program
  7. ioMemory: fusion IO
  8. eclipse 3.x中热部署WEB程序TOMCAT配置
  9. 网页实现二维码扫描和解析
  10. UI设计流行渐变配色素材,轻松驾驭色彩
  11. quartus驱动无法识别分析
  12. vue中清除浏览器缓存得方法
  13. C语言程序设计精髓--第3周编程题在线测试
  14. 概率论排列公式和组合公式实质 压强 : 压力=ps=压强*面积; 万有引力公式:
  15. 用于情绪测试的软件,第七章 情感心理自我测试心理测评软件
  16. 2021-2022下沉市场研究报告合集(共46份)
  17. Skywalking概述
  18. 智慧社区解决方案核心要点有哪些 智慧社区解决方案
  19. html+css实战144-banner-精品推荐-内容
  20. 如何购买腾讯--云服务器

热门文章

  1. 刷爆朋友圈!前百度总裁陆奇最新AI重磅演讲:我的大模型世界观
  2. 从“向内求”到“向外求”,云计算企业出海的好日子开始了?
  3. MindSpore分类指标之准确率、AUC/ROC详解(一)
  4. 批量提取文件夹中文件 目录、文件名、大小(备忘)
  5. 单片机控制继电器电路 程序就很简单了 做一个口的输出就可以了
  6. Unity3D 大型游戏 最后一站 源码 部分重点匹配战斗(四)(13)
  7. 三未信安荣获“年度中国最具潜力企业奖”
  8. 龙芯OpenHarmony课程 【2】启动分析
  9. 单片机第一个程序----点亮LED灯
  10. 50条经典管理心理学定律