Oracle 索引簇
索引簇是指使用索引定义簇键列数据的方法。如果用户需要执行连接查询显示主从表的数据,则应该将主从表组织到索引簇。
1.普通表与索引簇
在建立普通表时,Oracle 会为该表分配相应的表段。例如,当建立表DEPT 和EMP 时,Oracle 会分别为这两张表分配表段DEPT 和EMP ,并且它们的数据被分别存放到这两个表段中。
如图10-7所示,表EMP 中的所有数据被存放到表段EMP 中,而表DEPT 中的数据则被存放到表段DEPT 中。因为这两个表被存放在不同位置,所以在执行连接查询语句时,至少需要扫描两数据块才能检索到关联的数据。
empno
ename
job
7954736974997521
ATG SMITH ALLEN WARD
CLERK CLERK
SALESMAN SALESMAN
deptno
dname
loc
10203040
ACCOUNTING RESEARCH SALES
OPERATIONS
NEW YORK DALLAS CHICAGO BOSTON
DEPT deptno
10203030
EMP
图10-7 普通表存放数据的方式
使用索引簇存储表数据时,Oracle 会将不同表的相关数据按照簇键值的存放在簇段中。例如,当建立索引簇EMP_DEPT 时,并将EMP 和DEPT 表组织到索引簇后,Oracle 会按照簇键DEPTNO 存放相关数据,如图10-8所示。
簇键(deptno)10
7954778278397934ATG CLARK KING MILLER ACCOUNTING
dname NEW YORK
loc
20RESEARCH DALLAS
73697566778878767902
SMITH JONES SCOTT ADAMS FORD
DEPT_EMP
图10-8 索引簇存储数据
表EMP 和DEPT 中的所有数据被存储在簇段DEPT_EMP 中。因为关联数据被存储到同一个数据块,所以当执行如下的连接查询语句检索部门为10及该部门的雇员信息时,只需要扫描一个数据块就可以检索到关联数据。在这种情况下,使用索引簇显然速度更快。
select t2.deptno,t2.dname,t2.loc,t1.empno,t1.ename from emp t1,dept t2 where t1.deptno=t2.deptno and t1.deptno=10;
2.建立索引簇