2、显式为主键列建立反向键索引
2.1 反向键索引的原理和用途
我们知道Oracle会自动为表的主键列建立索引,这个默认的索引是普通的B-Tree索引。对于主键值是按顺序(递增或递减)加入的情况,默认的B-Tree索引并不理想。这是因为如果索引列的值具有严格顺序时,随着数据行的插入,索引树的层级增长很快。搜索索引发生的I/O读写次数和索引树的层级数成正比,也就是说,一棵具有5个层级的B-Tree索引,在最终读取到索引数据时最多可能发生多达5次I/O操作。因而,减少索引的层级数是索引性能调整的一个重要方法。
如果索引列的数据以严格的有序的方式插入,那么B-Tree索引树将变成一棵不对称的"歪树",如图 5所示:
![]() 图 5不对称的B-Tree索引 |
![]() 图 6对称的B-Tree索引 |
| create table T_ORDER ( ORDER_ID NUMBER(10) not null, CLIENT VARCHAR2(60), ADDRESS VARCHAR2(100), ORDER_DATE CHAR(8)); create unique index IDX_ORDER_ID on T_ORDER ( ORDER_ID ASC) reverse;alter table T_ORDER add constraint PK_ORDER primary key (ORDER_ID) using index IDX_ORDER_ID; |
![]() 图 7 设置反向键索引 |
![]() 图 8 为主键指定特定的索引 |
| create table T_ORDER (…);alter table T_ORDER add constraint PK_T_ORDER primary key (ORDER_ID) using index IDX_ORDER_ID;create unique index IDX_ORDER_ID on T_ORDER ( ORDER_ID ASC) reverse; |
![]() 图 9 设置生成键和索引SQL的选项 |
![]() 图 10 生成创建表主键和外键的SQL语句 |
![]() | 为HQ添加Oracle 10监控 | 12-02 |
![]() | 在oracle中导入导出dmp数据库文件 | 12-02 |
![]() | ORACLE查询或删除时指定使用索引的写法&s | 11-30 |
![]() | ORACLE分页查询SQL语法 | 11-30 |
![]() | Oracle数据库的十种重新启动步骤 | 12-06 |
![]() | 完全删除Oracle数据库的方法 | 12-06 |
![]() | 实例讲解Oracle里抽取随机数的多种方法 | 06-20 |
![]() | 在Oracle中实现搜索分页查询 | 08-21 |
![]() | ORACLE问题与解答 | 9910 |
![]() | Oracle数据操作和控制语言详解 | 6526 |
![]() | oracle学习的好书 | 4731 |
![]() | 优化Oracle库表设计的若干方法 | 4252 |
![]() | Oracle数据库技术(1) | 3982 |
![]() | Oracle数据库日常维护手册 | 3908 |
![]() | 完全删除Oracle数据库的方法 | 2931 |
![]() | 数据库设计三大范式应用实例剖析 | 2601 |