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

Oracle 數據類型、約束、索引、叢集、哈希叢集深度解析與實戰模板

     編輯:Oracle 教學

Oracle 數據類型、約束、索引、叢集、哈希叢集深度解析與實戰模板

本文系統整理 Oracle 核心邏輯結構的定義語法、選型原理、存儲細節與最佳實務,適合 DBA 設計表結構、開發人員編寫 DDL、架構師做容量規劃時查閱。

一、內建數據類型全景

字串類型

類型長度語義最大值字元集典型用途
CHAR(n BYTE|CHAR)固定,空格填充2000 位元組DB 字元集固定代碼、MD5、UUID
VARCHAR2(n BYTE|CHAR)可變4000 位元組DB 字元集通用業務字串,**建議 CHAR 語義**
NCHAR(n)固定,字元計2000 位元組國家字元集極少用
NVARCHAR2(n)可變,字元計4000 位元組國家字元集嚴格字元語義、跨平台移植
CLOB / NCLOB大物件(4GB-1)×BlockDB/國家字元集長文本、日誌、JSON 文檔

關鍵:NLS_LENGTH_SEMANTICS 預設 BYTE,**DDL 中顯式寫 CHAR**;VARCHAR 別用,**永遠用 VARCHAR2**;空字串 '' 在 VARCHAR2/NVARCHAR2 中等同 NULL。

數值類型

類型定義範圍/精度存儲
NUMBER(p,s)p=精度(1~38), s=刻度(-84~127)10^-130 ~ 10^1261~22 位元組
INTEGERNUMBER(38,0)整數同上
BINARY_FLOAT32-bit IEEE 754~6 位有效數字5 位元組
BINARY_DOUBLE64-bit IEEE 754~15 位有效數字9 位元組
FLOAT(n)二進制精度 n 位 (1~126)約等同 NUMBER變長

日期時間類型

類型大小精度/特性
DATE7 位元組秒級,公元前 4712 ~ 公元 9999
TIMESTAMP(n)7/11 位元組小數秒最多 9 位
TIMESTAMP WITH TIME ZONE13 位元組含時區位移
TIMESTAMP WITH LOCAL TIME ZONE11 位元組自動轉換會話時區
INTERVAL YEAR TO MONTH5 位元組年月間隔
INTERVAL DAY TO SECOND11 位元組天秒間隔

二進制/LOB/ROWID

  • RAW(n) / LONG RAW:2000/2GB 二進制,不做字元集轉換。
  • BLOB:二進制大對象 (圖片、聲音、視頻)。
  • BFILE:外部檔案指標,唯讀,最大 4GB。
  • ROWID:物理行地址 (堆表);UROWID:通用行地址 (IOT、外部表)。

二、約束完整模板

CREATE TABLE demo (
  id           NUMBER(10) PRIMARY KEY,
  code         VARCHAR2(20 CHAR) NOT NULL UNIQUE,
  name         VARCHAR2(100 CHAR) NOT NULL,
  status       CHAR(1 BYTE) DEFAULT 'A' CHECK (status IN ('A','I','D')),
  dept_id      NUMBER(10),
  created_by   VARCHAR2(30) DEFAULT USER,
  created_dt   DATE DEFAULT SYSDATE,
  CONSTRAINT fk_demo_dept FOREIGN KEY (dept_id) REFERENCES dept(id) ON DELETE SET NULL,
  CONSTRAINT ck_name_len CHECK (LENGTH(name) >= 2)
) TABLESPACE users
PCTFREE 10 PCTUSED 80
STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED);

約束狀態控制速查

ALTER TABLE demo ENABLE VALIDATE CONSTRAINT fk_demo_dept;   -- 驗證現有+未來
ALTER TABLE demo ENABLE NOVALIDATE CONSTRAINT fk_demo_dept; -- 僅未來
ALTER TABLE demo DISABLE CONSTRAINT fk_demo_dept;           -- 停用
ALTER TABLE demo DROP CONSTRAINT fk_demo_dept CASCADE;      -- 刪除含級聯 FK

三、索引策略與語法

索引類型適用場景建立範例
B*Tree (預設)高選擇性、範圍掃描、主鍵/唯一CREATE INDEX idx_demo_code ON demo(code) TABLESPACE idx_ts;
位圖索引低基數 (性別、狀態)、OLAP、分區表CREATE BITMAP INDEX idx_demo_status ON demo(status);
函數索引WHERE UPPER(name) = 'ABC'CREATE INDEX idx_demo_upper_name ON demo(UPPER(name));
反向索引右增長熱塊 (序列 PK)CREATE INDEX idx_demo_rev_id ON demo(id) REVERSE;
複合索引WHERE dept_id=1 AND status='A'CREATE INDEX idx_demo_dept_status ON demo(dept_id, status);
分區索引 LOCAL大表分區裁剪CREATE INDEX ... ON demo(dept_id) LOCAL;

四、叢集表

索引叢集 (關聯表共享塊)

CREATE CLUSTER hr_cluster (dept_id NUMBER)
PCTUSED 80 PCTFREE 5 SIZE 500 TABLESPACE users
STORAGE (INITIAL 200K NEXT 300K MINEXTENTS 2 MAXEXTENTS UNLIMITED PCTINCREASE 33);

CREATE TABLE dept_info (dept_id NUMBER PRIMARY KEY, dept_name VARCHAR2(100))
CLUSTER hr_cluster(dept_id);

CREATE TABLE emp_info (emp_id NUMBER PRIMARY KEY, emp_name VARCHAR2(50), dept_id NUMBER)
CLUSTER hr_cluster(dept_id);

-- 必須建叢集索引
CREATE INDEX idx_hr_cluster ON CLUSTER hr_cluster TABLESPACE users;

管理叢集

ALTER CLUSTER hr_cluster PCTUSED 60 PCTFREE 30;  -- 僅影響新塊
DROP CLUSTER hr_cluster INCLUDING TABLES CASCADE CONSTRAINTS;  -- 連帶刪表、FK

五、哈希叢集

CREATE CLUSTER hash_cluster (id NUMBER) SIZE 512 SINGLE TABLE HASHKEYS 500;
-- HASH IS id  -- 可指定哈希函數列,預設內部哈希
CREATE TABLE area (area_id NUMBER PRIMARY KEY, area_name VARCHAR2(200))
CLUSTER hash_cluster(area_id);

限制:不可 ALTER SIZE/HASHKEYS/HASH IS;不需/不可建叢集索引;單表哈希叢集適合全表掃描少、等值查詢多、鍵值唯一的場景。

六、存儲參數詳解

參數含義建議值
PCTFREE塊預留更新空間 %10 (OLTP) / 20 (頻繁更新)
PCTUSED塊可再用閾值 %80 (OLTP) / 40 (批量載入)
INITRANS初始事務槽數2 (OLTP) / 10 (高併發)
MAXTRANS最大事務槽數 (已廢棄,由塊大小決定)255
INITIAL首個 Extent 大小64K~1M 視表大小
NEXT後續 Extent 大小1M~10M
MINEXTENTS最小 Extent 數1
MAXEXTENTS最大 Extent 數UNLIMITED
PCTINCREASEExtent 增長 % (LMT 下無效)0 (LMT 建議)

LMT (Locally Managed Tablespace) + ASSM (Auto Segment Space Management) 已自動管理 PCTFREE/PCTUSED/EXTENTS,**建議拋棄手動存儲子句,改用預設**。

總結

Oracle 邏輯結構設計的核心決策樹:

  1. 字串 → VARCHAR2(n CHAR) (AL32UTF8) / 固定代碼 → CHAR / 跨平台字元語義 → NVARCHAR2。
  2. 數值 → NUMBER(p,s) 精確 / 科學計算 → BINARY_DOUBLE。
  3. 日期 → TIMESTAMP(n) 需小數秒 / DATE 兼容舊碼。
  4. 約束 → PK/FK/UK/CK/NOT NULL 五件套缺一不可,DDL 時建立,狀態用 ENABLE VALIDATE。
  5. 索引 → 高選擇性 B*Tree / 低基數位圖 / 函數索引匹配 WHERE 條件 / 反向索引解熱塊。
  6. 叢集 → 父子表頻繁 JOIN 且存取模式固定 → 索引叢集;單表等值鍵唯一高頻 → 哈希叢集。
  7. 存儲 → 使用 LMT+ASSM,拋棄手動參數,專注 PCTFREE/INITRANS 微調。

將上述模板納入團隊 DDL 規範,配合版本控管 (Flyway/Liquibase) 與 Code Review,即可實現結構變更的標準化、可追溯、可回滾。

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