• Oracle索引表


    索引组织表(Index-Organized Table)是按B-树的结构来组织和存储数据的。与标准表中的数据时无序存放的不同,索引表中数据按主键值有序存储。

                    叶子节点中存放的是表的主键值与所有非主键值,而不是B-树索引值与ROWID。由于整条记录都保存在索引表的叶子节点中,因此索引表不需要使用物理ROWID来确定记录的位置。

                    只要知道主键的值,就可以找到相应记录的完整内容。Oracle也会为每个主键创建一个逻辑上的ROWID,其他的索引将使用逻辑ROWID来映射索引表中的记录。

    1.索引表与标准表的比较

        (1)索引表中的ROWID列存放的是【逻辑】物理地址。而标准表的ROWID伪列中存储的则是真实的物理地址,这是两者之间最本质的区别。另外其他几个方面的差异都是因为有这个差异存在而存在。或者说,它是索引表优势的根源。 

        (2)索引表的主键约束是必须定义的,而标准表主键约束是可选的。

        (3)索引表通过全索引扫描按一定排序返回所有记录,而标准表是通过顺序全表扫描按一定排序返回所有记录

        (4)索引表不能是聚簇表,标准表可以是聚簇表。

        (5)索引表不能包含虚拟列

        (6)索引表只需要维护索引表一个存储结构,标准表需要维护表和索引两种

    2.索引表的优点

         (1)可以基于主键的快速查询及范围查询,因为数据时按主键顺序组织的

         (2)表与索引没有分离,维护容易

         (3)需要较少的存储空间,可以避免主键重复。

    3.索引表的溢出存储        

          普通B树索引条目一般比较小,因为在每个索引条目中仅保存索引列的值与ROWID的值。但是,因为索引表中的每个索引条目都包有整条地记录,所以,索引表中的索引条目就可能会很大。

    为此,用户若在索引表中查询数据,其查询的只是其中一部分字段内容的话,索引表的效果就体现不出来。相反,若表中的字段比较多的话,则效果会适得其反。为此,在Oracle数据库中,

    采用了溢出存储功能来应对索引表的这个缺陷。 

         如在一张员工基本信息表中,他有员工姓名、员工编号、员工出身年月、身份证号码、住址、户口、民族等信息,长达几十个字段。但是,在平时的时候,

    我们基本上只需要查询员工的姓名、编号、身份证号码即可。而不需要其他的信息。 此时,当员工比较多的时候,就需要把这张表转换成索引表,然后采用溢出管理功能,来提高员工信息常用字段的查询速度。

    把用户经常需要用到的员工姓名、编号、身份证号码等字段保存在叶子节点上。而把其他不常用的字段采取“溢出存储”策略。

    创建索引表

        创建一个索引表admin_doindex,保存在users表空间内,溢出百分比为20? 溢出部分保存在TBS1中

    SQL> create table admin_docindex(
      2  token char(20),
      3  doc_id number,
      4  token_frequency number,
      5  token_offsets varchar2(2000),
      6  constraint pk_admin_docindex primary key(token,doc_id))
      7  organization index                                             
      8  tablespace users
      9  pctthreshold 20 overflow tablespace TAS2;
    
    表已创建。organization index:创建索引


    pctthreshold 20:指定保留在索引段的索引条目中的记录的百分比
    overflow tablespace TAS2:指定溢出的数据段的存储表空间

    including :该字段保存在索引条目中

    维护索引表
     1.修改admin_docindex的参数设置
    SQL> alter table admin_docindex pctthreshold 15 including doc_id;
    
    表已更改。
    

      




  • 相关阅读:
    Dapper where Id in的解决方案
    逸鹏说道公众号福利:逆天常用的一些谷歌浏览器插件V1.3
    Hyper-V 激活Windows系统重启后黑屏的解决方法 + 激活方法
    Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件
    Winserver下的Hyper-v “未在远程桌面会话中捕获到鼠标”
    包建强的培训课程(10):Android插件化从入门到精通
    包建强的培训课程(8):iOS与设计模式
    包建强的培训课程(7):iOS企业级开发实战
    包建强的培训课程(5):算法与数据结构
    包建强的培训课程(4):App测试深入学习和研究
  • 原文地址:https://www.cnblogs.com/evencao/p/3181927.html
Copyright © 2020-2023  润新知