首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

深入解析 Oracle 資料庫叢集技術:索引叢集與雜湊叢集

     編輯:Oracle 資料庫基礎

什麼是叢集?

叢集是根據叢集鍵值將相關資料表的資料行實際儲存在同一磁碟區域,以達到快速檢索的目的。叢集索引的順序即資料的物理儲存順序,葉節點即資料節點。一個資料表最多只能建立一個叢集索引。

索引叢集

概念與優勢

將經常一起連接查詢的資料表(如 BOOKSHELF 與 BOOKSHELF_AUTHOR)依共同鍵值(如 Title)集中儲存,減少 I/O。每個唯一鍵值在叢集中僅儲存一次,兩表欄位附加於後,彷彿一張大表。

建立語法與範例

-- 1. 建立叢集
CREATE CLUSTER BOOKandAUTHOR (Col1 VARCHAR2(100));

-- 2. 建立叢集索引(插入資料前必須建立)
CREATE INDEX BOOKandAUTHORndx ON CLUSTER BOOKandAUTHOR;

-- 3. 建立屬於叢集的資料表
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);

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);

叢集鍵與資料表欄位依「位置順序」對應,而非名稱。

雜湊叢集

適用情境

單一資料表、固定透過主鍵等值查詢(SELECT * FROM T WHERE id = :x)。Oracle 以雜湊演算法直接計算資料物理位置,無需索引掃描,單次存取即取得資料。

建立語法範例

-- 基本雜湊叢集
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);

-- 單表雜湊叢集(9i+ 支援)
CREATE CLUSTER personnel (deptno NUMBER)
  SIZE 512 SINGLE TABLE HASHKEYS 500;

效能考量

  • 需指定資料列大小(SIZE)與預估鍵值數(HASHKEYS)。
  • 若鍵值分布不均,易導致大量資料溢出至溢位區塊,降低查詢效能。
  • 適合「唯讀/少更新、大量等值查詢」的查閱型資料表。

總結

索引叢集適合多表連接查詢;雜湊叢集適合單表主鍵等值查詢。正確選擇叢集類型並妥善設定參數,能顯著提升特定查詢模式的效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved