频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

详细介绍 Oracle 数据库的聚簇技术

来源: 作者: 出处:巧巧读书 2006-08-31 进入讨论组
关 键 词:oracle  数据库  cluster  散列算法  物理地址  

1. 什么是聚簇

聚簇是根据码值找到数据的物理存储位置,从而达到快速检索数据的目的。聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。

非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。一个表最多只能有一个聚簇索引。

2. 使用 Oracle 聚簇索引

聚簇是一种存储表的方法,这些表密切相关并经常一起连接进磁盘的同一区域。例如,表 BOOKSHELF 和BOOKSHELF_AUTHOR 数据行可以一起插入到称为簇(Cluster)的单个区域中,而不是将两个表放在磁盘上的不同扇区上。簇键(Cluster Key)可以是一列或多列,通过这些列可以将这些表在查询中连接起来(例如,BOOKSHELF表和BOOKSHELF_AUTHOR表中的 Title列)。为了将表聚集在一起,必须拥有这些将要聚集在一起的表。

下面是create cluster命令的基本格式:

create cluster (column datatype [, column datatype]...) [other options];

cluster的名字遵循表命名约定,column datatype是将作为簇键使用的名字和数据类型。column的名字可以与将要放进该簇中的表的一个列名相同,或者为其他有效名字。下面是一个例子:

create cluster BOOKandAUTHOR (Col1 VARCHAR2(100));

这样就建立了一个没有任何内容的簇(象给表分配了一块空间一样)。COL1的使用对于簇键是不相干的,不会再使用它。但是,它的定义应该与要增加的表的主键相符。接下来,建立包含在该簇中的表:

create table BOOKSHELF
    (Title VARCHAR2(100) primary key,
    Publisher VARCHAR2(20),
    CategoryName VARCHAR2(20),
    Rating VARCHAR2(2),
    constraint CATFK foreign key (CategoryName) references CATEGORY(CategoryName)
    )
    cluster BOOKandAUTHOR(Title);

在向BOOKSHELF表中插入数据行之前,必须建立一个聚簇索引:

create index BOOKandAUTHORndx on cluster BOOKandAUTHOR;

在上面的create table语句中,簇BOOKandAUTHOR(Title)子句放在表的列清单的闭括号的后面。BOOKandAUTHOR是前面建立的聚簇的名字。Title是将存储到聚簇Col1中的该表的列。create cluster语句中可能会有多个簇键,并且在created table语句中可能有多个列存储在这些键中。请注意,没有任何语句明确说明Title列进入到Col1中。这种匹配仅仅是通过位置做到的,即Col1和Title都是在它们各自的簇语句中提到的第一个对象。多个列和簇键是第一个与第一个匹配,第二个与第二个匹配,第三个与第三个匹配,等等。现在,添加第二个表到聚簇中:

create table BOOKSHELF_AUTHOR
    (Title VARCHAR2(100),
    AuthorName VARCHAR2(50),
    constraint TitleFK Foreign key (Title) references BOOKSHELF(Title),
    constraint AuthorNameFK Foreign key (AuthorName) references AUTHOR(AuthorName)
    )
    cluster BOOKandAUTHOR (Title);

当这两个表被聚在一起时,每个唯一的Title在簇中实际只存储一次。对于每个Title,都从这两个表中附加列。

来自这两个表的数据实际上存放在一个位置上,就好像簇是一个包含两个表中的所有数据的大表一样。

3. 散列聚簇

对于散列聚簇,它只有一个表。它通过散列算法求出存储行的物理存储位置,从而快速检索数据。创建散列聚簇时要指定码列的数据类型,数据行的大小及不同码值的个数。如果码值不是平均分布的,就可能有许多行存储到溢出块上,从而会降低查询该表的SQL语句的性能。

散列聚簇被用在总是通过主键查询数据的情况,例如要从表 T 查询数据并且查询语句总是是这样:

select * from T where id = :x;

这时散列聚簇是一个好的选择,因为不需要索引。Oracle 将通过散列算法得到值 :x 所对应的物理地址,从而直接取到数据。不用进行索引扫描,只通过散列值进行一次表访问。

散列聚簇语法示例:

CREATE CLUSTER personnel
    ( department_number NUMBER )
    SIZE 512 HASHKEYS 500
    STORAGE (INITIAL 100K NEXT 50K);

    CREATE CLUSTER personnel
    ( home_area_code NUMBER,
    home_prefix NUMBER )
    HASHKEYS 20
    HASH IS MOD(home_area_code + home_prefix, 101);
    CREATE CLUSTER personnel
    (deptno NUMBER)
    SIZE 512 SINGLE TABLE HASHKEYS 500;
更多文章 更多内容请看Linux数据库宝典  Oracle 10g基础应用  Oracle基础专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
·数据库专栏 (4553篇文章)
·数据库处理专题 (7528篇文章)
·城域网专题 (6839篇文章)
·数据库安全技术专题 (11412篇文章)
·数据库安装与卸载 (9189篇文章)
·Oracle 10g基础应用 (4128篇文章)
·Linux数据库宝典 (11765篇文章)
·数据库相关文章 (4553篇文章)
·数据库体系架构 (994篇文章)
·Oracle基础 (343篇文章)
热点标签: oracle  数据库  cluster  散列算法  物理地址  
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容
 
Web 本站
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章