Oracle的簇和簇表,Oracle簇表
Oracle的簇和簇表
簇由一組共用相同資料區塊的多個表組成,它將這些表的相關行一起儲存到相同資料區塊中,這樣可以減少查詢資料所需的磁碟讀取量。建立簇後,使用者可以在簇中建立表,這些表成為簇表。
例如,scott使用者中有一個員工資訊表emp、部門資訊表dept,這兩個表共用部門編號deptno列。當將emp和dept表組成簇後,在物理上Oracle將emp和dept表中有關每個部門的所有員工資訊和部門資訊行儲存到相同的資料區塊中。因為簇將不同表的相關行一起儲存到相同的資料區塊中,所以合理使用簇可以協助減少查詢資料所需的磁碟讀取量。而對於經常單獨使用的表不應該使用簇。
建立簇
建立簇的文法形式如下:
CREATE CLUSTER cluster_name(COLUMN date_type[,COLUMN date_type]...)[PCTUSED 40 | INTEGER][PCTFREE 10 | INTEGER][SIZE INTEGER][INITRANS 1 | INTEGER][MAXTRANS 255 | INTEGER][TABLESPACE tablespace_name][STORAGE storage]
例1:
以SYSDBA角色登入並賦予使用者相關許可權:
GRANT CREATE ANY CLUSTER TO siege;
然後建立簇:
CREATE CLUSTER cluster_student(sid NUMBER(4))PCTUSED 40PCTFREE 10SIZE 1024STORAGE ( INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS 20)TABLESPACE learning;
建立簇表
建立好簇後,接下來建立簇表,在cluster_student簇中建立兩個簇表:
CREATE TABLE score( sid NUMBER(4), sname VARCHAR2(10), sscore NUMBER(4) )CLUSTER cluster_student(sid)
CREATE TABLE student1( sid NUMBER(4), sname VARCHAR2(10), sage NUMBER(4))CLUSTER cluster_student(sid)
管理簇
建立簇索引
在建立簇表以後,若直接插入資料會報ORA-02032錯誤,此時是因為未建立簇索引,建立簇索引如下:
CREATE INDEX cluster_student_index ON CLUSTER cluster_student TABLESPACE learning;
然後插入資料:
INSERT INTO student1 VALUES(1000,'siege',24);
此時就不會發生錯誤了。
更改簇資訊
建立好的簇可以變更,如下:
ALTER CLUSTER cluster_studentPCTFREE 60PCTUSED 50;
刪除簇資訊
刪除簇與刪除表的文法一致,若簇中含有簇表,則加上including tables子句
DROP CLUSTER cluste_name [INCLUDING TABLES]