【數據庫】oracle的簇與簇表


轉載:http://blog.csdn.net/luxiaopengpeng/article/details/48178441

簇由一組共享多個數據塊的多個表組成,它將這些表的相關行一起存儲到相同數據塊中,這樣可以減少查詢數據所需的磁盤讀取量。創建簇后,用戶可以在簇中創建表,這些表稱為簇表。

例如有如下兩個表:student和achievement.。其中,student表存儲學生信息,需要使用SID字段(存儲學生ID);achievement表存儲學生成績信息,也需要使用SID字段。也就是說,student和achievement需要共享學生ID數據塊。

注意:如果用戶在自己的模式中創建簇,則必須具有create cluster權限和unlimited tablespace系統權限;如果想在其他模式中創建簇,則還必須具有create any cluster系統權限

創建簇和簇表

1.創建簇

創建簇,需要使用create cluster語句,例如創建一個名為stu_ach的簇,如下:
create cluster stu_ach(sid number)  
pctused 40
pctfree 10 
size 1024  
storage  
(initial 128k  
next 128k  
minextents 2  
maxextents 20  
)tablespace huizhi;  

 


上面創建簇stu_ach時,指定通過SID字段來對簇中的表進行聚簇存儲,這個SID字段就可以稱之為聚簇字段。
注意:size子句用來為聚簇字段提供指定的數據塊數量。例如,將size設置為1024,即表明簇中的聚簇字段記錄只能存儲在1024個數據塊中。1

2.創建簇表

創建簇表,需要使用cluster子句指定所使用的簇和簇字段。
例如,在stu_ach簇中創建兩個簇表:student和achievement。如下:
create table student(  
sid number,  
sname varchar2(8),  
sage number  
)  
cluster stu_ach(sid);  
--表已創建  
create table achievement(  
aid number,  
score number,  
sid number  
)  
cluster stu_ach(sid);  
--表已創建 
上例在創建student和achievement表時,使用cluster子句指定它們所使用的簇為stu_ach,所使用的簇字段為SID。
提示:將student和achievement兩個表組成一個簇后,在物理上oracle會將這兩個表中每個學生的學生信息和該學生的所有成績信息存儲到相同的數據塊中。
現在向student表中添加記錄,如下:
insert into student values(1,'小明',24);  
發現還無法向簇表中添加記錄。
注意:為了能夠向簇表中添加記錄,還需要首先為簇建立索引。

創建簇索引

簇索引與簇表不同,它並不存在於簇中,而是與普通索引一樣需要具有獨立的存儲空間。
例如,為簇stu_ach建立一個簇索引,如下:
create index stu_ach_index  
on cluster stu_ach  
tablespace huizhi; 
上例為簇stu_ach建立了一個名為stu_ach_index的簇索引。創建簇索引后,就可以向簇表中添加記錄了。

管理簇

對一個簇的管理主要是修改簇和刪除簇。如果用戶想要管理簇,則必須具有alter any cluster系統權限。

修改簇

修改一個簇,主要是修改簇的如下屬性值:
1.物理存儲屬性,包括pctfree、pctused、initrans、maxtrans和storage。
2.為了存儲簇鍵值的所有行所需空間的平均值size。
3.默認的並行度。

刪除簇

1.刪除一個空簇:當一個簇中不包含簇表時,刪除該簇可以使用drop cluster cluster_name語句。
2.刪除一個含有簇表的簇:需要使用drop cluster...including tables語句,如下
drop cluster stu_ach including tables; 

  

另外,如果某個簇含有簇表,並且有外鍵約束,則需要使用drop cluster...including tables cascade constraints語句刪除該簇。如下:
drop cluster stu_ach including tables; 

  




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM