ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 反向键索引

反向键索引

原创 Linux操作系统 作者:oracleclub 时间:2011-12-02 23:55:59 0 删除 编辑
反向键索引

情景:
1,insert繁忙,主键是用序列号(每次加1),主键是有索引的,用序列号生成,因此相邻的索引记录就可能存在于同一个数据块中,引起数据块竞争,导致性能下降。
2,随着时间增长,久值被删除,新值被插入,逐渐的序列号很大,索引树是往序列号大的一面偏,树的深度加深,所以索引效率低下,造成严重的性能问题。

注意:位图索引与其他类型的索引之间不能使用这种方法进行转换;如果要转换的话,只能先删除原来的索引后,再重建成要转换类型的索引。
反转前 --反转后
123  ---321        
124  ---421
125  ---521
所以反转后,原来相邻的主键就不再相邻了。就可以将相邻的序列号分散到不同的数据块中,上面情景1,2的问题就解决了。

利弊:建了反向键索引后,如果要进行范围查询(between and),就会不认索引走全表扫描,
总结:在建反向键索引时,要考虑insert操作重要,和还是范围查询重要

语法:
1,创建反向键索引
SQL> create table test3 as select * from dept;

Table created.

SQL> create index i_rev on test3(dname) reverse tablespace TEST_INDEX;

Index created.

2,查询
SQL> select INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS from user_indexes;

INDEX_NAME INDEX_TYPE      TABLE_NAME            UNIQUENES
---------- --------------- ------------------------------ -      --------
I_REV      NORMAL/REV      TEST3                          NONUNIQUE
PK_DEPT    NORMAL           DEPT                           UNIQUE

3,修改
SQL> alter index I_REV rebuild noreverse;

Index altered.

SQL> select INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS from user_indexes;

INDEX_NAME INDEX_TYPE      TABLE_NAME                     UNIQUENES
---------- --------------- ------------------------------ ---------
I_REV      NORMAL          TEST3                          NONUNIQUE
PK_DEPT    NORMAL          DEPT                           UNIQUE

SQL> alter index I_REV rebuild reverse;

Index altered.

SQL> select INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS from user_indexes;

INDEX_NAME INDEX_TYPE      TABLE_NAME                     UNIQUENES
---------- --------------- ------------------------------ ---------
I_REV      NORMAL/REV      TEST3                          NONUNIQUE
PK_DEPT    NORMAL          DEPT                           UNIQUE


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26465805/viewspace-712650/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 函数索引
请登录后发表评论 登录
全部评论

注册时间:2011-11-22

  • 博文量
    61
  • 访问量
    82169