171.View the Exhibit and examine the command used to create the ZONEDATA table.

来源:互联网 发布:淘宝官方下载 编辑:程序博客网 时间:2024/05/27 09:46
171.View the Exhibit and examine the command used to create the ZONEDATA table.

The table contains a million rows for zonewise analysis in the DSS system. DML operations are
performed very rarely on the table. You decide to prepare an index on the ZONE column to enhance the
performance of the queries on the ZONE column.
Which type of index would you select in this scenario?
A.Bitmap index
B.Reverse key index
C.Normal B-Tree index
D.Function-based index
答案:A
解析:这里是数据仓库并且很少的dml操作,因此可以使用bitmap index
一、bitmap index
  1.对于包含小范围的列,可以使用位图索引
  2.叶子结点包含如下部分
    a.索引项头:存储列数和锁信息
    b.键值:有索引列的长度和值组成
    c.起始rowid:位图的起始地址
    d.终止rowid:位图的终止地址
    e.位图段:由一串位组成,如果为1表示该位所对应的行包含索引的键值,为0不包含
  3.位图索引一般用于数据仓库
  4.应该在包含少量不同值的列上创建,如果不同值的数量少于表中行数的1%,那么就可以考虑使用位图索引,并且对表行的更新应该极少,并且需要频繁用在查询的where子句中
    create bitmap index i_order_status on order_status(status);  
二、Reverse key index
  1.比如有一张表特别大,而且插入频繁,并且存在索引,索引是一个自增长的值,这个时候由于频繁的插入造成了索引频繁的更新,他们集中在了一个数据块上,这就影响了系统的性,并且当频繁的删除的时候,由于大部分删除的都是历史数据,也就是索引序号小的数据,这就造成了索引树是往序号大的一面偏,造成了树的深度加深从而使系统效率下降,为了解决这个问题引入了反转关键字索引
  2.反转关键字是通过关键字的每个字节顺序颠倒过来再建索引的方法来实现的,比如下面
     反转前              反转后
     order#              order#
     1230                0321
     1231                1321
    这样就分散到了不同的数据块中了  
  3.创建反转索引
    SQL> create index wahaha_a_indx on wahaha(a) reverse tablespace bk_data;
    Index created.
  4.查看索引类型
    SQL> select index_name,index_type,table_name,uniqueness from user_indexes
    INDEX_NAME                     INDEX_TYPE      TABLE_NAME      UNIQUENES
    ------------------------------ --------------- --------------- ---------
    WAHAHA_A_INDX                  NORMAL/REV      WAHAHA          NONUNIQUE
  5.修改索引的类型
    alter index wahaha_a_indx rebuild noreverse;
    alter index wahaha_a_indx rebuild reverse;
    --位图索引和其他的索引不能使用这种方法,因此只能删除重建
  6.优缺点
    如果创建了反转索引后,使用范围查询,那么会进行全表扫描,因为他的索引都在不连续的块中
     所以必须进行全表扫描来进行查询,比如between语句
三、B-Tree index
  1.索引的候选列应该用来存储很大范围的的值的列,这类索引称为B-树索引
  2.oracle会为表的主键以及包含在唯一约束中的列自动创建B-树索引
  3.创建B-树索引
    create [unique] index index_name on table_name(column_name[,column_name ...]) tablespace tab_space;
    --unique 指索引列的值必须唯一
    --由于性能原因的问题,通常应该将索引和表存储在不同的表空间中
  4.b-tree索引的组成
    a.由根、分枝、叶子组成
    b.叶子组成
      i.索引项头:存储列数和锁的信息
      ii.索引列长度和值:必须成对出现,它定义了列的长度,和实际值
      iii.rowid:指向表中数据行的rowid
    c.分区表上的叶子结点具有如下特征
      i.如果具有相同索引键值得数据行有多行且索引没有被压缩,则索引键值会重复存放
      ii.所有索引所在列的值为null的数据行,oracle将不存储与之对应的索引项,所以如果where子句中索引所在的列的值为null,oracle将不使用索引而进行全表扫描
    d.dml操作的时候索引的操作
      i.insert 的时候,对应的索引数据块中插入一行索引项
      ii.delete 的时候,对索引项进行逻辑删除,仅仅是做一个删除标记,只有等块中所有的项都被删除后才真正删除它们
      iii.update 的时候,进行两个操作,一个是逻辑删除,一个是新增
四、Function-based index
   1.10g之前的版本默认是不使用函数索引的,需要打开参数
      SQL> show parameter query_rewrite_enabled
      NAME                                 TYPE        VALUE
      ------------------------------------ ----------- ------------------------------
      query_rewrite_enabled                string      TRUE
      alter system set query_rewrite_enabled=true;
      alter session set query_rewrite_enabled=true; 
五、bitmap和btree区别
    1.位图索引大小可以查看create_bitmap_area_size来确定存储区大小
    2.对于修改索引来说,位图使用块一级的锁,b-tree使用行一级的锁      
    3.b-tree适合于oltp,因为dml频繁
    4.位图索引适合于数据仓库 
0 0
原创粉丝点击