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

SQL Server 與 Oracle 索引架構對比:Clustered、Nonclustered、B-tree 與 Heap

     編輯:Oracle 資料庫基礎

核心架構差異

特性SQL ServerOracle
預設表儲存Heap (無序)Heap (無序)
Clustered Index資料葉層即資料頁,表只能有一個無原生對應,用 IOT (Index Organized Table)
Nonclustered Index葉層含 Row Locator (RID 或 Clustered Key)B-tree 索引,葉層含 ROWID
主鍵預設Clustered IndexNonclustered (B-tree) Index
Index Include Columns支援 (Covering Index)12c+ 支援 INCLUDE,舊版用複合索引
Filtered/Partial Index支援 WHERE 子句Function-based Index 實現
Columnstore Index支援 (DW/OLAP)12c+ In-Memory Column Store / Hybrid Columnar Compression

SQL Server 索引深度解析

Clustered Index 設計原則

  • 窄:鍵值越小越好,影響所有 Nonclustered Index 大小
  • 唯一:非唯一會加 4-byte Uniquifier
  • 遞增:IDENTITY/SEQUENCE 避免頁分裂
  • 靜態:避免更新導致資料移動

適用查詢:範圍掃描 (BETWEEN, >, <)、JOIN (FK)、ORDER BY/GROUP BY、大結果集。

Nonclustered Index 設計

  • Heap 表:Row Locator = RID (File:Page:Slot)
  • Clustered 表:Row Locator = Clustered Key
  • Key Lookup (Bookmark Lookup) 代價高 → 使用 Include Columns 覆蓋

Oracle 索引機制

B-tree 索引結構

Branch Blocks (關鍵值 + 子分塊指標)
    ↓
Leaf Blocks (關鍵值 + ROWID)
    ↓
Table Data (Heap 或 IOT)
  • 高度通常 2-3 層,極少超過 4
  • 唯一/非唯一、單欄/複合通用結構
  • NULL 值:單欄全 NULL 不進索引,複合索引至少一欄非 NULL 才進索引

ROWID 結構

OOOOOO.FFF.BBBBBB.RRR:Object#、相對檔案號、區塊號、區塊內行號

  • 物理定位,直接單次 I/O 讀取
  • 移動 (ALTER TABLE MOVE) 會改變 ROWID,需重建索引

遷移與互通注意點

SQL Server 概念Oracle 對應實現
Clustered IndexIOT (PRIMARY KEY 即儲存順序)
Nonclustered Index + Include複合索引 (所有欄位放入鍵) 或 12c+ INCLUDE
Filtered IndexFunction-based Index (CASE WHEN 條件 THEN 鍵 ELSE NULL END)
Heap 表Heap 表 (無 Clustered Index)
Fill FactorPCTFREE (區塊預留空間)
Page Split區塊分裂 (Block Split),ASSM 自動管理

效能調優共通原則

  • 索引非越多越好:每個索引增加 INSERT/UPDATE/DELETE 代價
  • 統計資訊:SQL Server UPDATE STATISTICS / Oracle DBMS_STATS 定期收集
  • 碎片整理:SQL Server ALTER INDEX REBUILD/REORGANIZE / Oracle ALTER INDEX REBUILD/COALESCE
  • 查詢計畫:SSMS 圖形化計畫 / Oracle DBMS_XPLAN.DISPLAY_CURSOR
  • 參數化:避免硬解析,SQL Server 強制參數化 / Oracle CURSOR_SHARING=FORCE (謹慎用)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved