`
rongxr
  • 浏览: 8263 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

唯一索引的索引键不保存rowid

阅读更多
       tom的oracle 9i&10g编程艺术中这样一句话:在一个非唯一索引中,oracle会把rowid作为一个额外列加到键上,使索引键为唯一; 先按索引键排序,再按rowid升序排序;在一个唯一索引中,不会再加rowid到索引键上。

       这个怎么理解呢?唯一索引的索引键不保存rowid,那怎么通过rowid查找数据表中某行的值呢。下面的内容是通过google搜索得来,来源:http://www.itpub.net/thread-1287023-1-1.html

下面是一个完整的用例,使用了数据DUMP技术。

SQL> conn / as sysdba
已连接。
SQL> create table t as select * from dba_objects;

表已创建。

SQL> create index t_idx on t(object_id);

索引已创建。

SQL> select t.header_file,t.header_block from dba_segments t
  2   where t.segment_name='T';

HEADER_FILE HEADER_BLOCK
----------- ------------
          1        58408

SQL> alter system dump datafile 1 block 58410;

系统已更改。

普通索引,内容如下:
row#0[8024] flag: ------, lock: 0, len=12
col 0; len 2; (2):  c1 03
col 1; len 6; (6):  00 40 e4 29 00 30

SQL> drop index t_idx;

索引已删除。

SQL> create unique index t_idx on t(object_id);

索引已创建。

SQL> select t.header_file,t.header_block from dba_segments t
  2   where t.segment_name='T_IDX';

HEADER_FILE HEADER_BLOCK
----------- ------------
          1        92136

SQL> alter system dump datafile 1 block 92138;

系统已更改。

SQL>

唯一索引,内容如下:
row#0[8025] flag: ------, lock: 0, len=11, data:(6):  00 40 e4 29 00 30
col 0; len 2; (2):  c1 03

可以看出,在非唯一索引中,Oracle会增加一列,用于存放对应rowid,即索引列的最后,并按照这个顺序排序。对于唯一索引,是放入data(6)中,即row header中。不论怎样,rowid还是会被存储的。

分享到:
评论

相关推荐

    ORACLE重建索引总结

    5、每次索引访问的读取数:是指利用索引读取一数据行时所需要的逻辑I/O操作数,逻辑读取不必是物理读取,因为索引的许多内容已经保存在数据缓冲区,然而,任何数据大于10的索引都需要重建。 6、什么时候重建呢? ...

    oracle使用索引与不使用索引的性能详析

    上级索引块包括下级索引块的索引数据,叶节点包括索引数据和确定行实际位置的rowid。 使用索引的目的: 加快查询速度 降低I/O操作 消除磁盘排序 何时使用索引: 查询返回的记录数 排序表<40% 非排序表 <...

    Oracle中的rowid

    ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。从而快速地定位到数据行。...

    索引Index的优化设计

    1、管理组织索引 索引可以大大加快数据库的查询速度,索引把表中的逻辑值映射到安全的RowID,因此索引能进行快速定位数据的物理地址。但是有些DBA发现,对一个大型表建立的索引,并不能改善数据查询速度,反而会影响...

    ORACLE数据库重建索引

    导致索引失效: 1、表上频繁发生update,delete操作; 2、表上发生了alter table ..move操作(move操作导致了rowid变化)。

    Oracle DBA实战索引优化

    索引是一种可以选择创建的数据库...ROWID包含了存储列值的表行在磁盘上的物理位置,索引中记录了rowid,因此oracle 就可以根据索引中的rowid来判断记录是否是在同一个block 中,通过下面语句找到记录对应的block号。

    Oracle SQL建立有效索引减少回表

    回表:在数据中,当查询数据的时候,在索引中查找索引后,获得该行的rowid,根据rowid再查询表中数据,是回表。  在数据库中,数据的存储都是以块为单位的,称为数据块,表中每一行数据都有的地址标志ROWID。每次...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等  语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) ...

    MySQL中主键与rowid的使用陷阱总结

    大家在MySQL中我们可能听到过rowid的概念,但是却很难去测试实践,不可避免会有一些疑惑,比如: 如何感受到rowid的存在; rowid和主键有什么关联关系; 在主键的使用中存在哪些隐患; 如何来理解rowid的潜在...

    关于mysql自增id,你需要知道的

    导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键。本篇文章将以问答的形式讲述关于自增id的一切。 注: 本文所讲的都是基于Innodb存储引擎。...这个ROWID不像ORACLE的RO

    收获不止SQL优化

    10.1.3 反向键索引 272 10.1.4 全文索引 272 10.2 走进其他索引的世界 272 10.2.1 位图索引 273 10.2.2 函数索引 278 10.2.3 反向键索引 282 10.2.4 全文索引 282 10.3 其他索引的相关案例 285 10.3.1 位图...

    收获,不止SQL优化--抓住SQL的本质

    10.1.3 反向键索引 272 10.1.4 全文索引 272 10.2 走进其他索引的世界 272 10.2.1 位图索引 273 10.2.2 函数索引 278 10.2.3 反向键索引 282 10.2.4 全文索引 282 10.3 其他索引的相关案例 285 10.3.1 位图...

    关于Mysql自增id的这些你可能还不知道

    那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着...

    Oracle数据库管理员技术指南

    贺辞 序 前言 第1章 建立和配置数据库 1.1 数据库创建规划 1.1.1 规划以及提出正确的问题 1.1.2 怎样确定恰当的数据块尺寸 ...9.2.2 反向键索引 9.2.3 降序索引 9.2.4 索引编排表 9.2.5 管理索引的...

    oracle的sql优化

     对Flag等只存储是或否信息的字段,一般不推荐建立索引。必要可以采用位图索引  *存在递归查询情况如果关联Table太多对性能会造成较大影响,往往推荐采用临时表转为分步骤操作提高性能  *尽量使用表关联查询而不...

    海量数据库解决方案_韩国_李华植

    2.1.3 反向键索引52 2.2 位图索引53 2.2.1 位图索引的形成背景54 2.2.2 位图索引的结构和特征55 2.2.3 位图索引的读取57 2.3 基于自定义的函数索引60 2.3.1 基于自定义的函数索引的概念和结构60 2.3.2 基于自定义...

    oracle sql performance tuning

    3.11.3 相同的索引列不能互相比较,这将会启用全表扫描. 10 3.11.4 避免在索引列上使用计算. 11 3.11.5 基于成本的优化器(CBO)会对索引的选择性进行判断,来决定是否使用索引 11 3.11.6 Index信息的重新统计 11 3.12...

    海量数据库解决方案_韩国_李华植_Part02

    2.1.3 反向键索引52 2.2 位图索引53 2.2.1 位图索引的形成背景54 2.2.2 位图索引的结构和特征55 2.2.3 位图索引的读取57 2.3 基于自定义的函数索引60 2.3.1 基于自定义的函数索引的概念和结构60 2.3.2 基于自定义...

Global site tag (gtag.js) - Google Analytics