`
rongxr
  • 浏览: 8753 次
  • 性别: 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索引,常见索引问题

    4. **唯一性和非唯一性索引**:唯一索引确保键值的唯一性,非唯一索引则可能需要rowid作为额外列来确保条目的唯一性。非唯一索引中,数据会先按键值排序,再按rowid升序排序。 5. **索引的选择性**:选择性高的索引...

    rowid与rownumber

    * INDEX 创建:使用 rowid 来创建索引,以提高查询效率。 * 数据迁移:使用 rowid 来迁移数据,以保持数据的一致性。 六、rownum 的应用 rownum 可以用于各种数据报表和查询,例如: * 分页:使用 rownum 来实现...

    Oracle数据库中的索引管理技术.pdf

    唯一性索引不允许数据重复。非唯一性索引则允许。 (3)两列比一列好:Oracle 允许用户建立复合索引,这种索引针对多个表列。 (4)where 子句和索引:Oracle 根据用户在 where 子句中的定义找出满足查询要求的...

    oracle索引类型及扫描方式大整理

    6. **唯一索引**:确保索引键值的唯一性,每个键值对应一个ROWID,防止重复数据。 7. **非唯一索引**:允许键值重复,每个键值可能对应多个ROWID,索引数据按照键值和ROWID共同排序。 索引的优化涉及多个方面,...

    Oracle索引分析与比较

    - 函数索引是在索引中保存了数据列经过函数处理后的值。当查询涉及到对某列应用相同函数时,如`SELECT * FROM table WHERE function(column) = value`,函数索引能够显著提高查询速度。系统可以直接使用索引来匹配...

    Oracle索引优化

    位图索引适合于低基数(即唯一值少)的列,它用位图表示每个值,节省空间但不适用于高并发的事务处理。函数索引允许对列应用函数后再创建索引,使得查询可以使用函数结果进行查找。 了解索引的基本概念后,我们关注...

    Oracle 索引解析

    非唯一索引会在键基础上附加RowID以确保唯一性,而唯一索引则不需要。 反向索引是针对B-树索引的一种优化,特别适用于处理递增序列号的列,通过反转索引键的字节分布,减少并行环境下的索引块争用。 降序索引是B-...

    索引总结 ,多年使用,工作培训

    2. **使用索引的情况**:若在`name`字段上建立了索引,Oracle会在全表扫描的基础上,将每条记录的`name`值按升序排列,并构建索引条目(包含`name`和`rowid`),存储到索引段中。这样,当查询`name='wish'`时,可以...

    Oracle索引详解

    创建和管理索引时,需要注意索引的类型(如分区或非分区,B树或位图索引),以及是否需要使用唯一索引来保证数据的唯一性。此外,优化索引策略包括选择合适的数据类型,避免在索引列上使用函数,以及适时使用覆盖...

    Oracle数据库rowid深入探析.pdf

    在Oracle 8.0.3之前的版本中只能使用限制性rowid,从Oracle 8.0.3开始,Oracle主要使用扩展的rowid,限制性rowid很少使用, 一般只用于确定非分区表的非分区索引表中的行位置。 扩展性rowid的结构 扩展性rowid的...

    Oracle优化全攻略一【Oracle 索引概念】.docx

    位图索引适用于低基数(即唯一值较少)的列,如性别或布尔值;函数索引允许在索引中应用函数,使得查询时能直接使用函数结果;而interMedia全文索引则用于全文本搜索。 了解基本的索引概念,可以通过查询`DBA_...

    oracle索引类型及扫描方式大整理new

    而反向索引通过反转索引键中的字节顺序,使得原本连续的键值分散到不同的叶块中,从而均衡负载,减少索引块的争用情况。 然而,反向索引并非万能解药,它在某些场景下存在限制。例如,在进行范围查询(`WHERE column...

    Oracle索引优化相关

    ROWID是一种特殊的索引形式,它实际上是一个指向表中每一行物理位置的地址。通过ROWID,可以直接定位到某一行数据,这对于快速检索数据非常有用。ROWID在Oracle中是一种特殊的数据类型,可以通过它来快速访问特定的...

    ORACLE重建索引总结

    2. `RENAME`表不影响索引,因ROWID不变。 总结: 1. 判断是否重建索引,可通过`ANALYZE INDEX`和`index_stats`表进行评估。 2. 重建索引有删除重建(不推荐)、`ALTER INDEX REBUILD`(推荐,尤其是在线模式)和`...

    Oracle DBA实战索引优化

    ROWID是指向表中某一行在物理存储上的唯一标识,它包含了该行在磁盘上的精确位置。通过索引中的ROWID,Oracle能够在物理上快速定位到所需的行,而无需逐行扫描整个表。 索引的工作原理可以通过以下步骤来理解: 1....

    培训教程之Oracle索引详解PPT教案学习.pptx

    此外,还有唯一索引和非唯一索引,前者不允许索引值重复,后者则允许重复,主键列通常要求创建唯一索引。 总之,Oracle索引是优化数据库性能的关键元素,理解其概念、原理和类型对于有效管理和优化数据库至关重要。...

Global site tag (gtag.js) - Google Analytics