Oracle 数据库的聚簇技术
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 数据库的聚簇技术相关推荐
- oracle中的聚簇,Oracle数据库的聚簇技术
聚簇是根据码值找到数据的物理存储位置,从而达到快速检索数据的目的.聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点.非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指 ...
- oracle向右削减和补全,b操纵序列削减Oracle数据库开辟工作量-开辟技术/b[Oracle防范]...
赞助商链接 本文"操纵序列削减Oracle数据库开辟工作量-开辟技术[Oracle防范]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任 ...
- 直播预告丨Oracle数据库网络及存储技术详解-2022云和恩墨大讲堂
文末有惊喜福利哟~ Oracle数据库网络及存储技术详解 点此" 预约 ",即刻报名↓ DBA需要掌握些什么?这是一个老生常谈的话题了.很多时候数据库出了问题,到底是数据库本身的 ...
- oracle数据库性能调优技术--深入理解散列连接执行计划
一.概述 这篇文章是数据库性能调优技术系列的第四篇.上一篇文章讲解了深入理解嵌套循环连接执行计划. 上一篇文章中提到两张表的连接有三种执行方式:1)嵌套循环连接:2)散列连接:3)归并连接.散列连接是 ...
- Oracle数据库的闪回技术
当 Oracle 数据库发生逻辑损坏时,可以使用闪回技术简单快捷地进行数据库的恢复. 闪回数据库使用闪回日志执行闪回.闪回删除使用回收站.其它所有技术都使用还原数据.并不 是所有闪回功能都会修改数据库 ...
- oracle 修改聚簇因子,Oracle 基础篇 --- 聚簇因子(clustering_factor)
####4.2.1 聚簇因子(clustering_factor) 统计帮助优化器生成使用索引的成功信息,并且是表中建立了索引的数据排序优良度的一个度量值:向优化器表明了具有同样索引值的数据行是不是存 ...
- 关于计算机专业的调整与优化,基于oracle数据库系统性能调整与优化分析-计算机应用技术专业论文.docx...
基于oracle数据库系统性能调整与优化分析-计算机应用技术专业论文 摘要 数据库系统的性能最终决定数据库的可用性和生命力.大多数数据库系统在 运行一段时间后都会存在一定的性能问题,主要涉及数据库硬件 ...
- 51学工坊整理|甲骨文Oracle数据库 21c来了,来看看有哪些创新技术
甲骨文公司宣布在 Oracle云中推出新版本的全球领先融合数据库 Oracle 数据库 21c.Oracle 数据库 21c 不仅包含 200 多项全新创新,包括不可变区块链表.数据库内 JavaSc ...
- expert one on one oracle,数据库表——EXPERT ONE-ON-ONE ORACLE
在ORACLE中,表的类型有如下七种: 堆组织表,索引组织表,索引聚簇表,散列聚簇表,嵌套表,临时表,对象表.下面得内容只是介绍在实际应用中经常使用的表类型,详细的介绍可以看TOM的EXPERT ON ...
最新文章
- MLOps是构建在一个谎言上的吗?
- JavaScript对象模型-执行模型
- C#实现web信息自动抓取
- 动态链接库的编写与调用
- 【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
- source insight 4.0 护眼背景色设置
- mysql分库分表实战及php代码操作完整实例
- SPOJ- QTREE+HDU 3966(树链剖分裸题
- LeetCode 2206. 将数组划分成相等数对
- 1195.最长最短文本
- 我的所有邮箱 My all E-mail
- python基础到实践教程_Python从入门到实践案例教程(21世纪高等学校计算机教育实用规划教材)...
- 第5讲:软考中高项04_进度管理、成本管理
- python_day9 回调函数
- Rocket Kitten 报告
- 五一成都峨眉山三日游 20140501~20140503
- itunes更新失败卸载失败(AppleMobileDeviceSupport6464安装时回滚的解决办法)
- 笔记 C++11 std::minmax_element() 的使用(寻找最小值和最大值)
- 录制课件时,小米笔记本电脑,外接耳麦, 麦克风没那有声音,怎么办?
- 全虚拟化半虚拟化硬件辅助搜索虚拟化操作系统级虚拟化