下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

oracle 默认排序及认知

作者:课课家教育     来源: http://www.kokojia.com点击数:1570发布时间: 2017-06-05 13:00:53

标签: 数据库Oracle数据库基础

  Oracle对无orderby的语句返回的结果不进行排序,oracle此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。但这个顺序是可能被打乱的,在表的数据被删除后,rowid会被新插入的数据占用。所以一个无orderby查询结果看起来也可能是个杂乱无章的。

  oracle的数据库实现就一个原则,怎么快怎么效率高就怎么来。大多数情况下不需要排序还非得按主键排序这不是浪费资源么?

  ORACLE可以借助DECODE函数,自定义顺序排序:

Oracle对无orderby的语句返回的结果不进行排序,oracle此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。但这个顺序是可能被打乱的,在表的数据被删除后,rowid会被新插入的数据占用。所以一个无orderby查询结果看起来也可能是个杂乱无章的。    oracle的数据库实现就一个原则,怎么快怎么效率高就怎么来。大多数情况下不需要排序还非得按主键排序这不是浪费资源么?    ORACLE可以借助DECODE函数,自定义顺序排序:

  另外,在Report开发中,常需要将Total放最后,其它项则按其它排序方式(一般按正常的升序),可看作同一列有两种排序方式,那么可以这样:

 另外,在Report开发中,常需要将Total放最后,其它项则按其它排序方式(一般按正常的升序),可看作同一列有两种排序方式,那么可以这样:

  关于oracle排序的几点认识:

  (1)oracle本身不具有任何默认排序功能,要想排序,必须使用orderby,而orderby后的数据行默认是asc(升序排列),要降序选择desc;

  (2)oracle是按块进行读取数据的,Oracle会根据具体的数据块的存储返回记录,如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序,实际上oracle没有进行任何排序操作;

  (3)rowid表示的是数据存放的数据块内部地址,如果没有要求排序,oracle会顺序的从数据块中读取符合条件的数据返回到客户端,不过看起来好像是按照rowid排序似的如果数据量足够大,即使相同的语句,都有可能不同的结果。一般而言,表是堆表,所以是无序的,它是按照物理存放顺序来读取的,rowid是自动随行生成的;

  (4)oracle的rowid:

  rowid是数据库的一个伪列,建立表的时候数据库会自动为每个表建立ROWID列用来唯一标识一行记录。rowid是存储每条记录的实际物理地址,对记录的访问是基于ROWID。每条记录的物理地址,对数据库中记录行的最快检索方式就是使用rowid来进行查找。唯一标识一行记录selectrowid,*from表名试一下,你就明白了,rowid就象是邮递员送信时要找的信封上的家庭地址一样,每个rowid都不会重复,oracle查找通过它可以更快地查找到数据.rowid是一个伪列,对应块号,行号,行的序号.

  小编结语:

  更多内容尽在课课家教育!

赞(11)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程