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

Oracle 資料庫三大特殊欄位類型深度解析:自增、彈性、拆分欄位

     編輯:Oracle 資料庫基礎

一、自增欄位:Sequence 最佳實踐

Oracle 無原生 Identity/Auto_Increment,標準做法使用 Sequence。

優勢對比

場景SQL Server (Identity)Oracle (Sequence)
訂單主/明細同步寫入先 INSERT 主檔 → SCOPE_IDENTITY() 取回 ID → INSERT 明細先 seq.NEXTVAL 取得 ID → 主檔明細同步使用,單次往返
效能需額外往返Sequence 緩存機制 (CACHE) 極高效能
跨表共用編號困難天然支援多表共用同一 Sequence

實作範例

CREATE SEQUENCE seq_order_id START WITH 1 INCREMENT BY 1 CACHE 1000;

-- 取號
SELECT seq_order_id.NEXTVAL INTO v_order_id FROM dual;

-- 同步寫入主檔與明細
INSERT INTO order_header (order_id, ...) VALUES (v_order_id, ...);
INSERT INTO order_line (order_id, line_id, ...) VALUES (v_order_id, 1, ...);

二、彈性欄位:預留擴充屬性,避免 DDL 風險

上線後新增欄位需執行 DDL,導致 View/Package/Trigger 失效、鎖表風險。預留彈性欄位可規避此問題。

命名建議

-- 數值型
NUMBER_ATTRIBUTE1 ~ NUMBER_ATTRIBUTE10
-- 字串型
STRING_ATTRIBUTE1 ~ STRING_ATTRIBUTE10
-- 日期型
DATE_ATTRIBUTE1 ~ DATE_ATTRIBUTE10

儲存空間迷思

Oracle 採用列式儲存邏輯:欄位值為 NULL 時不佔用實體空間(僅佔用資料字典中繼資料)。預留大量 NULL 欄位不會造成空間浪費。

三、拆分欄位(垂直分表):大表效能優化策略

當單表欄位超過 100+、資料量達千萬筆,全表掃描 (FTS) 成本極高。

拆分原則

  • 核心高頻欄位(PK、常用查詢欄位、索引欄位)置於主表。
  • 低頻/大型欄位(備註、BLOB、歷史屬性)移至子表,1:1 關聯。
  • 主表保持窄表特性,FTS 掃描極快;Join 子表時走 PK 索引,效能損耗極小。

適用場景

  • 會員檔:基本資料(主表) + 偏好設定/活動記錄(子表)
  • 訂單表:核心欄位(主表) + 擴充屬性 JSON/BLOB(子表)

總結

Sequence 解決自增、彈性欄位規避 DDL 風險、垂直分表優化大表存取。三者結合,構建高效能、可維護的 Oracle 資料模型。

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