Oracle数据库的聚簇技术
聚簇是根据码值找到数据的物理存储位置,从而达到快速检索数据的目的。聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。一个表最多只能有一个聚簇索引。
使用 Oracle 聚簇索引
聚簇是一种存储表的方法,这些表密切相关并经常一起连接进磁盘的同一区域。例如,表 BOOKSHELF 和BOOKSHELF_AUTHOR 数据行可以一起插入到称为簇(Cluster)的单个区域中,而不是将两个表放在磁盘上的不同扇区上。簇键(Cluster Key)可以是一列或多列,通过这些列可以将这些表在查询中连接起来(例如,BOOKSHELF表和BOOKSHELF_AUTHOR表中的 Title列)。为了将表聚集在一起,必须拥有这些将要聚集在一起的表。
下面是create cluster命令的基本格式:
|
cluster的名字遵循表命名约定,column datatype是将作为簇键使用的名字和数据类型。column的名字可以与将要放进该簇中的表的`一个列名相同,或者为其他有效名字。下面是一个例子:
|
这样就建立了一个没有任何内容的簇(象给表分配了一块空间一样)。COL1的使用对于簇键是不相干的,不会再使用它。但是,它的定义应该与要增加的表的主键相符。接下来,建立包含在该簇中的表:
|
在向BOOKSHELF表中插入数据行之前,必须建立一个聚簇索引:
|
在上面的create table语句中,簇BOOKandAUTHOR(Title)子句放在表的列清单的闭括号的后面。BOOKandAUTHOR是前面建立的聚簇的名字。Title是将存储到聚簇Col1中的该表的列。create cluster语句中可能会有多个簇键,并且在created table语句中可能有多个列存储在这些键中。请注意,没有任何语句明确说明Title列进入到Col1中。这种匹配仅仅是通过位置做到的,即Col1和Title都是在它们各自的簇语句中提到的第一个对象。多个列和簇键是第一个与第一个匹配,第二个与第二个匹配,第三个与第三个匹配,等等。现在,添加第二个表到聚簇中:
|
当这两个表被聚在一起时,每个唯一的Title在簇中实际只存储一次。对于每个Title,都从这两个表中附加列。
来自这两个表的数据实际上存放在一个位置上,就好像簇是一个包含两个表中的所有数据的大表一样。
散列聚簇
对于散列聚簇,它只有一个表。它通过散列算法求出存储行的物理存储位置,从而快速检索数据。创建散列聚簇时要指定码列的数据类型,数据行的大小及不同码值的个数。如果码值不是平均分布的,就可能有许多行存储到溢出块上,从而会降低查询该表的SQL语句的性能。
散列聚簇被用在总是通过主键查询数据的情况,例如要从表 T 查询数据并且查询语句总是是这样:
|
这时散列聚簇是一个好的选择,因为不需要索引。Oracle 将通过散列算法得到值 :x 所对应的物理地址,从而直接取到数据。不用进行索引扫描,只通过散列值进行一次表访问。
散列聚簇语法示例:
|
-
Oracle认证体系介绍
oracle的体系很庞大,要学习它,首先要了解oracle的框架。在这里,简要的讲一下oracle的架构,让初学者对oracle有一个整体的认识。物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成)控制文件:包含维护和验证数据库完整性的必要信息、例...
-
关于表空间不足时Oracle管理Recyclebin
我们知道,在Oracle10g中,droptable如果没有加purge选项.实际数据并没有删除,因而没有释放表空间.那么当被删除的对象占用了所有空间时,会发生什么?出门一起来看看!YXYUP@dbatest>selecttablespace_name,sum(bytes)/1024/1024fromdba_data_fileswheretablespace_...
-
Oracle认证:Freebufferwaits等待事件总结
Freebufferwaits1.简述:当数据库要在buffercache中寻找空闲空间来放置数据,但发现空间不足时,就会产生这个等待;2.详述:a)在用户请求块的DBA上应用HASH函数,获得适当的hashbucket;b)检索bucket对应的chain,确认块头是否存在,若存在就使用;c)若不存在,用户进程在LRU链...
-
Oracle数据库冷备份恢复过程
把oracle数据库从我的电脑上迁移到机房的电脑上,一开始采用dmp/imp方式,但是发现需要导出很多用户,太麻烦。所以决定采用冷备份/冷恢复的方式。过程如下:通过v$controlfile查看控制文件,通过v$logfile查看重做日志文件,通过V$DATAFILE查看数据文件,发现他们都处于同一...