select返回记录的顺序

来源:不详 责任编辑:栏目编辑 发表时间:2013-07-01 06:54 点击:
关键字:select
1.简介
       当我们执行了select语句,select返回的记录的顺序对我们编程方式有较大影响,对数据库记录备份清除以及sql性能优化都有很大的关系。因此有必要明确select返回记录的顺序。
select返回记录的顺序与数据库类型有很大关系,因此以下按数据库类型分别讨论。本文主要讨论了oracle/sybase/sql server返回记录的顺序,从原理探讨三种数据库各自的特点,并着重探讨了这些差异对数据查询及记录备份的影响。
2. oracle
以下假设数据库查询优化方式均为基于rule的方式,ORACLE 采用两种访问表中记录的方式:
  a. 全表扫描 (Full Table Scan)
  全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。
  b. 通过ROWID访问表
你可以采用基于ROWID的访问方式情况,提高访问表的效率,ROWID包含了表中记录的物理位置信息。ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。通常表现为按索引扫描。(Index Scan)
2.1全表扫描
如果select语句不能使用索引,则Oracle按全表扫描方式读取数据块,对于返回的结果集,oracle按rowid的大小顺序来返回记录。因此 select * from mytable 与 select * from mytable order by rowid效果是一样的
       可以通过select rowid from table得到rowid伪列,数据类型为ROWID类型。使用查询语句返回的是ROWID的扩展格式(Extended Rowid)。扩展格式的ROWID由18个字符组成。这18个字符可以按照OOOOOO.FFF.BBBBBB.SSS的格式分为4组。分别代表数据对象编号(Data Object Number),数据文件编号(Datafile Number),数据块编号(Data Block Number),记录或记录片断的块内行号。
       必须说明的是,并不是后插入记录的rowid就越大,有可能后插入的记录rowid还要小。下面给出两个论点加以证明:
1.后插入的记录块内行号可能大,也可能小
根据我们的试验,假设现在表中有三条记录假设文件号相同,按块号,行号排列如下:

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • SQL注入攻击及其防范检测技术研究
    • Sql-Server应用程序的高级Sql注入
    • 学生信息管理系统数据库原理课程设计报告
    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • 经验总结:登录和优化IBM DB2的执行速度
    • db2管理工具小结
    • MySQL服务器的启动与停止
    • SQL编程(一)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1