对簇表来说,总是要先创建簇段(cluster segment)。然后将表关联到cluster segment里。由此可知,簇表也是虚拟表,没有对应的segment,簇表对应的是cluster segment。有两种类型的簇表:索引簇表和哈希簇表。索引簇表中,簇上面必须有一个索引。其主要用于总是进行主明细表关联查询的表,主表和明细表根据关联字段,将数据同时放入同一个簇数据块里,也就是一个数据块存放了两个表的记录。这样的话,当我们两表关联查询时,只需要扫描一个数据块就可以了。
创建簇表的实例如下:
create cluster orders(orderno number);create index idx_orders on cluster orders;
create table order_master(orderno number,customerid number,createdate date) cluster orders(orderno);
create table order_item(orderno number,productid number,qty number) cluster orders(orderno);
在哈希簇表中,则是在将表的记录插入簇段的时候,对簇所在的列运用哈希函数,从而得到该记录所在的数据块的位置。哈希簇不能像索引簇那样关联多个表,我们只能将一个表关联到哈希簇上。
其创建命令如下:
create cluster phones_customer(phone_no number) hashkeys 100000 size 50;
create table phones(phone_no number,name varchar2(10)) cluster phones_customer(phone_no);
上面的命令中hashkeys表示phone_no的值最多不超过100000.对于每个hashkeys值所对应的所有记录行来说,在segment头部都会有一块空间,来存放这些数据行的地址。而size就表示了每个hashkeys所能使用的空间的大小,在上例中,该空间为50个字节。