`
foolraty
  • 浏览: 400309 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
文章分类
社区版块
存档分类
最新评论

Oracle ---- 簇(聚集)--cluster(转)

阅读更多
         Oracle基礎----簇(聚集)
Cluster就是把經常訪問的表在物理上存儲在一起,它是存儲表數據的一种方法,將具有同一公共列值得行存儲在一起,這些公共列構成聚集瑪(Cluster Key).

優點:只存儲了一個聚集瑪值,有效節省存儲空間,改進存取時間,減少訪問磁盤I/O的次數。

缺點:對同一張表,不適用聚集時,執行insert,delte,update可能會降低執行速度,

使用範圍:適用于更新較少的表。

創建簇,用戶必須具有create cluster系統權限以及擁有足夠的表空間配額。
為其他用戶穿件簇的話,必須擁有create any cluster的系統權限。
对象的存储定义与cluster有关,而不是与表有关.因为聚簇中有很多表

create cluster emp_dept_cluster (deptno number(2)) size 1024

size参数影响着一个数据块上聚簇键的多少.也是影聚簇表的空间利用率.

創建簇表,必須有create table或create any table系統權限,創建簇時,可是使用帶cluster字句的create table命令。
1:簇表
簇是一种用于存儲數據表中數據的方法,實際上是一組表,由一組共享相同數據塊的多個表組成。這些表有公共的列,並且經常一起使用。

將多個不同表的相關行一起存儲到相同的數據塊中,也稱聚集。所以合理使用簇可以幫助減少查詢數據所需要的磁盤讀取量,對於經常單獨使用的表而言,不應該使用簇。

散列簇和索引簇

散列簇表類似簇表,索引簇表中,ORACLE使用存儲在索引中的鍵值來定位表中的行,但是,使用散列函數代替了簇索引,散列簇表中,oracle採用行的瑪值,使用内部函數或者自定義的函數進行散列運算,從而指定數據的存放位置。
散列簇上不能創建索引,也不需要創建索引。

聚集索引:
簇表中添加數據時,必須為簇建立索引,用戶必須有create any index的系統權限,同時必須具有足夠的表空間或者擁有unlimited tablespace系統權限。
Create index emp_dept_index on clusteremp_dept_cluster tablespace users
Storate(initial 50k,next 50k minextents 2 maxextents 10 pctincrease 33);


簇修改屬性:
1:物理屬性,如initrans和一些存儲特性
2:簇内存儲所有行的存儲的存儲空間
3:默認的並行度

Alter clusteremp_dept_cluster size20mtalbespace users parallel2storage (initial 2k next 3k minextents3 maxextents 5 initrans 6 pctincrease 6);

Size k|m|g設置存儲具有同一個聚集鍵的所有行的空間大小
Tablespace表空間
Parallel整數/ noparallel設置執行創建語句 或一些DML語句時的並行度
默認noparallel,即不進行任何並行操作。

Storage:設置聚集的存儲參數。

Drop cluster:

相應的表和相應得聚集索引也被DROP,同時佔用的空間也將釋放給表空間,格式:
Drop clusteremp_dept_clusterincluding tables cascade constraints
Inluding tables:簇表和簇一起drop
Cascade constraints: drop掉依賴簇的完整性約束。

簇在oracle中的視圖:
DBA_CLUSTERS
ALL_CLUSTERS
USER_CLUSTERS

DBA_CLU_COLUMNS
USER_CLU_COLUMNS

SYS AS SYSDBA on 2008-02-22 15:20:38 at ORCL>desc dba_clu_columns;
名稱                                     空值?   類型
----------------------------------------- -------- ----------------------------
OWNER                                    NOT NULL VARCHAR2(30)
CLUSTER_NAME                             NOT NULL VARCHAR2(30)
CLU_COLUMN_NAME                          NOT NULL VARCHAR2(30)
TABLE_NAME                               NOT NULL VARCHAR2(30)
TAB_COLUMN_NAME                                   VARCHAR2(4000)

簇使用的例子:

散列簇:
SYS AS SYSDBA on 2008-02-22 11:53:49 at ORCL>create cluster emp_hash_clu(empno number(10))
2 pctused 70 pctfree 10 tablespace users hash is empno hashkeys 150
3 /

已建立叢集.

SYS AS SYSDBA on 2008-02-22 12:06:01 at ORCL>create table emp(empno number(10) primary key,
2 ename varchar2(15) not null, date_of_birth date,deptno number(10)) cluster emp_hash_clu(empno);

已建立表格.
Hash is ,size,hashkeys對簇的性能影響很大,應該合理設置這些參數。
Size所有行所需空間的平均大小
語句中使用了默認的内部散列函數,hash is字句指定了進行散列的列,如果列是唯一的標識行,就可以制定為散列值,hashkeys指定和限制散列函數可以產生的唯一的散列值得數量,將具有同一個散列值得數據存在一起。

散列簇的相關視圖:

DBA_CLUSTERS
ALL_CLUSTERS
USER_CLUSTERS

DBA_CLU_COLUMNS
USER_CLU_COLUMNS

顯示散列聚集函數的信息,如散列函數的表達式。
Dba_cluster_hash_expressions
All_cluster_hash_expressions
User_cluster_hash_expressions


SYS AS SYSDBA on 2008-02-22 11:41:30 at ORCL>edit
已將file afiedt.buf寫入

1 create cluster stu_dep_clu(dept_id varchar2(10))
2 pctused 70
3 pctfree 10
4 size 1024
5 tablespace users
6* storage(initial 200k next 300k maxextents 20)
SYS AS SYSDBA on 2008-02-22 11:41:47 at ORCL>/

已建立叢集.


SYS AS SYSDBA on 2008-02-22 11:43:13 at ORCL>edit
已將file afiedt.buf寫入

1 create table department(
2 dept_id varchar2(10) primary key,
3 dep_name varchar2(20),
4 office varchar2(20))
5* cluster stu_dep_clu(dep_id)
SYS AS SYSDBA on 2008-02-22 11:43:21 at ORCL>/
cluster stu_dep_clu(dep_id)
                   *
ERROR在行5:
ORA-00945: specified clustered column does not exist


SYS AS SYSDBA on 2008-02-22 11:43:22 at ORCL>edit
已將file afiedt.buf寫入

1 create table department(
2 dept_id varchar2(10) primary key,
3 dep_name varchar2(20),
4 office varchar2(20))
5* cluster stu_dep_clu(dept_id)
SYS AS SYSDBA on 2008-02-22 11:43:29 at ORCL>/

已建立表格.

SYS AS SYSDBA on 2008-02-22 11:43:31 at ORCL>create table student(
2 stu_id varchar2(10) primary key,
3 stu_name varchar2(15),
4 sex char(2),
5 dep_id varchar2(10) references department(dept_id))
6 cluster stu_dep_clu(dep_id);

已建立表格.

SYS AS SYSDBA on 2008-02-22 11:47:54 at ORCL>create index stu_dep_index on clu
;

已建立索引.

SYS AS SYSDBA on 2008-02-22 11:49:05 at ORCL>insert into department(dept_id,de
2 values('A2324','yes','22eee');

已建立1個資料列.

SYS AS SYSDBA on 2008-02-22 11:49:53 at ORCL>insert into student(stu_id,stu_na
2 values('s2223','liming','m','A2324');

已建立1個資料列.

SYS AS SYSDBA on 2008-02-22 11:51:21 at ORCL>drop cluster stu_dep_clu including tables;

已刪除叢集.
分享到:
评论

相关推荐

    Oracle SQL命令通解三步曲.pdf

    簇(Cluster)是Oracle中用于物理存储表数据的一种结构,它允许将经常一起使用的表数据存储在一起。簇可以将相关行存储在相同的数据块中,从而提高多表关联查询的性能。在Oracle数据库设计中,簇是提高性能的一种...

    [043]-Oracle公司数据库培训资料les_10_schema.ppt

    簇通过一个共同的键(Cluster Key)将相关记录聚集在一起,可以提高特定查询的性能。 在管理方案对象时,DBA需要掌握一些关键任务,如: - **估计新表的大小**:这是规划数据库存储的关键,以确保有足够的空间来...

    Oracle 簇的使用详解

    在Oracle数据库中,簇是由多个共享相同数据块的表组成的集合,这些表通常一起被查询,因此通过将它们聚集在同一区域内,可以减少磁盘I/O,从而加快数据检索速度。簇内的表被称为簇表。 创建簇的步骤如下: 1. 使用...

    Oracle8数据库系统.ppt

    创建簇索引时,可以使用`CREATE CLUSTER`命令,然后创建关联的表并指定它们要聚集的键。簇索引有助于减少I/O操作,提高读取性能,但写入操作可能会变慢,因为数据需要根据索引顺序进行物理排序。 除此之外,Oracle8...

    大型数据库系统概论课件 第6章 Oracle9i数据库对象的管理(3).ppt

    簇(Cluster)在Oracle数据库中是一种特殊的数据组织形式,它将具有相同关键字段的多个表物理地聚集在一起,以提高特定类型的查询性能,特别是那些涉及联接操作的查询。簇的管理涉及到创建、修改和删除簇,以及管理...

    专题资料(2021-2022年)SMSE10管理表对象.ppt

    1. 数据存储方法:数据可以以多种方式存储,包括常规表(Heap Table)、索引组织表(Index-Organized Table)、聚簇表(Cluster)和分区表(Partitioned Table)。常规表是最常见的数据存储方式,数据按随机顺序存储...

    PL/SQL9i完全教程解析

    6. **簇(Cluster)**:物理上将相关表聚集,提升数据访问速度。 7. **数据库链接(Database Link)**:分布式数据库中连接不同数据库的桥梁。 8. **快照(Snapshot)**:远程表的本地副本,便于数据同步。 9. **...

    Oracle索引质量介绍和分析脚本分享

    - **聚簇因子(Cluster Factor)**:聚簇因子是衡量索引是否有效地将相关行聚集在一起的指标。当索引的聚簇因子接近1时,表示索引键值的顺序与表中数据的物理顺序相近,这通常意味着较高的索引质量。反之,如果聚簇...

    Mysql 存储引擎和索引揭秘

    例如,像Oracle和Microsoft SQL Server这样的数据库系统往往只提供一种存储引擎,而MySQL因为其可插拔的存储引擎架构,支持多种存储引擎。 在MySQL中,常见的存储引擎有: 1. MyISAM:这是MySQL早期默认的存储引擎...

Global site tag (gtag.js) - Google Analytics