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;

Oracle 数据库的聚簇技术相关推荐

  1. oracle中的聚簇,Oracle数据库的聚簇技术

    聚簇是根据码值找到数据的物理存储位置,从而达到快速检索数据的目的.聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点.非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指 ...

  2. oracle向右削减和补全,b操纵序列削减Oracle数据库开辟工作量-开辟技术/b[Oracle防范]...

    赞助商链接 本文"操纵序列削减Oracle数据库开辟工作量-开辟技术[Oracle防范]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任 ...

  3. 直播预告丨Oracle数据库网络及存储技术详解-2022云和恩墨大讲堂

     文末有惊喜福利哟~ Oracle数据库网络及存储技术详解 点此" 预约 ",即刻报名↓ DBA需要掌握些什么?这是一个老生常谈的话题了.很多时候数据库出了问题,到底是数据库本身的 ...

  4. oracle数据库性能调优技术--深入理解散列连接执行计划

    一.概述 这篇文章是数据库性能调优技术系列的第四篇.上一篇文章讲解了深入理解嵌套循环连接执行计划. 上一篇文章中提到两张表的连接有三种执行方式:1)嵌套循环连接:2)散列连接:3)归并连接.散列连接是 ...

  5. Oracle数据库的闪回技术

    当 Oracle 数据库发生逻辑损坏时,可以使用闪回技术简单快捷地进行数据库的恢复. 闪回数据库使用闪回日志执行闪回.闪回删除使用回收站.其它所有技术都使用还原数据.并不 是所有闪回功能都会修改数据库 ...

  6. oracle 修改聚簇因子,Oracle 基础篇 --- 聚簇因子(clustering_factor)

    ####4.2.1 聚簇因子(clustering_factor) 统计帮助优化器生成使用索引的成功信息,并且是表中建立了索引的数据排序优良度的一个度量值:向优化器表明了具有同样索引值的数据行是不是存 ...

  7. 关于计算机专业的调整与优化,基于oracle数据库系统性能调整与优化分析-计算机应用技术专业论文.docx...

    基于oracle数据库系统性能调整与优化分析-计算机应用技术专业论文 摘要 数据库系统的性能最终决定数据库的可用性和生命力.大多数数据库系统在 运行一段时间后都会存在一定的性能问题,主要涉及数据库硬件 ...

  8. 51学工坊整理|甲骨文Oracle数据库 21c来了,来看看有哪些创新技术

    甲骨文公司宣布在 Oracle云中推出新版本的全球领先融合数据库 Oracle 数据库 21c.Oracle 数据库 21c 不仅包含 200 多项全新创新,包括不可变区块链表.数据库内 JavaSc ...

  9. expert one on one oracle,数据库表——EXPERT ONE-ON-ONE ORACLE

    在ORACLE中,表的类型有如下七种: 堆组织表,索引组织表,索引聚簇表,散列聚簇表,嵌套表,临时表,对象表.下面得内容只是介绍在实际应用中经常使用的表类型,详细的介绍可以看TOM的EXPERT ON ...

最新文章

  1. MLOps是构建在一个谎言上的吗?
  2. JavaScript对象模型-执行模型
  3. C#实现web信息自动抓取
  4. 动态链接库的编写与调用
  5. 【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
  6. source insight 4.0 护眼背景色设置
  7. mysql分库分表实战及php代码操作完整实例
  8. SPOJ- QTREE+HDU 3966(树链剖分裸题
  9. LeetCode 2206. 将数组划分成相等数对
  10. 1195.最长最短文本
  11. 我的所有邮箱 My all E-mail
  12. python基础到实践教程_Python从入门到实践案例教程(21世纪高等学校计算机教育实用规划教材)...
  13. 第5讲:软考中高项04_进度管理、成本管理
  14. python_day9 回调函数
  15. Rocket Kitten 报告
  16. 五一成都峨眉山三日游 20140501~20140503
  17. itunes更新失败卸载失败(AppleMobileDeviceSupport6464安装时回滚的解决办法)
  18. 笔记 C++11 std::minmax_element() 的使用(寻找最小值和最大值)
  19. 录制课件时,小米笔记本电脑,外接耳麦, 麦克风没那有声音,怎么办?
  20. 全虚拟化半虚拟化硬件辅助搜索虚拟化操作系统级虚拟化

热门文章

  1. 小学六年级 计算机演讲稿,小学六年级演讲稿大全
  2. jquery分页插件jpages参数说明-jpages使用笔记
  3. jQuery ajax跨域请求的解决方法
  4. 计算机应用专业英语求职信,计算机应用专业英文求职信写作
  5. 浅谈图像处理方向的就业前景[转]
  6. 类似微信的微会聊应用项目源码
  7. office2016/2019版本打开时出现卡顿的解决办法
  8. 超经典 | 趣解计算机网络概念,网关,DHCP,路由
  9. html中Emoji符号
  10. Java 获取Request,Response对象方法