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;
分享到:
相关推荐
如果聚簇因子差,意味着索引中的键值顺序与数据行的物理顺序不匹配,这可能会影响索引的效率。在某些情况下,可能需要重建索引来改善聚簇因子,以提高查询性能。 5. 更新操作与性能: 由于数据库的更新操作通常...
当索引的层数增加、聚簇因子差(实际数据分布与索引顺序不一致)或者删除的索引空间未被重用时,可能需要对索引进行重建以保持其效率。 索引的基础操作是一个更新由一个删除和一个插入组成,这意味着每次数据更改,...
支持各种表,普通的HEAP表,IOT表,聚簇(CLUSTER)表。 DESC表,以显示表的列定义 支持10g及以上的大文件(BigFile)表空间 列出表的分区和子分区 支持表被truncate后的数据恢复 支持表被drop后的数据恢复 支持...
- **Oracle索引误区总结**:列出了一些常见的误解,例如索引会变得不平衡或高聚簇因子意味着需要重建索引等,并解释了这些误区为何不正确。 - **何时考虑创建索引**:讨论了在何种情况下创建索引是合理的。 #### ...
- **索引重建需求**:当索引的聚簇因子变差或者层级增加时,可能需要重建索引来优化性能。 - **性能优化**:为了保持索引的有效性,有时需要定期重建索引。这通常发生在索引使用频繁或数据量大时。 #### 索引的基础...
索引聚簇表:索引聚簇表是表相关的表共享同一数据块中的相同列,并把相关数据存储中同一个数据块上。创建索引聚簇表中最重要的是对SIZE参数有很好的估量,否则聚簇将会降低空间利用,降低效率。 使用索引聚簇表的...
3. 非聚簇索引:与聚簇索引相反,适用于字符型主键,WEBHR9.0系统中大部分表推荐使用非聚簇索引。 三、数据库优化与维护 1. 在Oracle数据库中,系统具有自动优化功能,会根据字段使用频率创建或删除索引。这可能...
- CREATE CLUSTER:创建数据库聚簇。 - CREATE DATABASE LINK:建立与其他数据库的连接。 - CREATE SEQUENCE:创建序列号,用于自动编号。 - CREATE SESSION:登录数据库并建立会话。 - CREATE SYNONYM:创建...
反之,如果聚簇因子远大于1,说明索引键值在物理存储上分散,可能导致查询性能下降。 - **叶子块(Leaf Blocks)**:叶子块是B树索引结构中最底层的节点,包含实际的行指针。较小的叶子块数量通常意味着更高的索引...
`获取所有聚簇信息。 9. **快照**: - `SELECT * FROM dba_snapshots;`查询快照信息。 10. **同义词**: - `SELECT * FROM dba_synonyms WHERE table_owner='SPGROUP';`按所有者查找同义词,所有者为`PUBLIC`...
这部分重点在于理解不同存储策略对性能的影响,如分区表、索引组织表、聚簇表和普通表的适用场景,以及如何利用分区来提升查询效率。同时,会提供实际案例进行分析。 四、SQL 语句 SQL 语句的编写技巧是培训的重点...
7. **数据存储与数据管理**:讨论了数据的磁盘存储方式,Oracle的磁盘资源分配策略,以及不同类型的索引(如B树、位图、聚簇和非聚簇索引)和其作用,强调了索引对查询性能的影响。 8. **对象关系数据库**:除了...
文章目录1....8. 什么是聚簇索引与非聚簇索引9. Mysql索引主要使用的数据结构有哪些?10. 谈谈MyISAM和innoDb实现Btree索引方式的区别11. B+tree与B-tree的区别是什么?为什么B+tree更适合做文件索
提出了一种面向实体的空间数据组织模型--实体对象层次模型 (feature-oriented object level,FOOL) ,讨论了基于该模型的空间数据组织关键技术:空间分区、空间聚簇、空间索引,并着重对数据库服务层、应用接口层、...
- **查询条件**:利用索引字段作为查询条件,尤其是聚簇索引,并通过`index index_name`强制指定索引。 - **表扫描**:避免对大表进行全表扫描,必要时创建新索引。 - **联合索引**:使用联合索引时,确保使用...
- 考虑实际应用,建立唯一索引和聚簇索引以优化查询性能。 - 表和索引分散在不同表空间,分别存储在目录容器和文件容器中,以提高管理和性能。 5. **数据库实施**: - 建立至少6张表,每个表有主键,必要时设置...
迭代器的实现考虑了聚簇存储,一次读取一个块并逐条处理记录。 2. **SPJ查询结果的输出**: SPJ(Select-Project-Join)是SQL查询中的基本操作,这里指结果的输出方式。实验实现了类似Oracle SQL*Plus的风格,通过...
合理创建和使用主键、唯一索引、非聚簇索引、覆盖索引等,可以减少磁盘I/O,提高查询效率。同时,避免过多的索引也会带来维护成本和写操作性能下降的问题。 3. **查询语句优化**: - **避免全表扫描**:尽量使用...
- **多维聚簇索引**:提升查询效率。 - **扩展性**:支持SMP和MPP,支持SQL任务的并行处理。 - **高可扩展性**:从单CPU到多CPU或集群的无缝扩展,原应用可平滑迁移。 - **在线备份与恢复**:支持多种数据复制...