索引是關係型數據庫性能的核心。本文系統對比 Oracle 與 SQL Server 在索引類型、存儲結構、適用場景、維護策略上的異同,助力跨平台遷移與調優決策。
INCLUDE 列,突破 900 字節/16 列限制,實現覆蓋索引。| 類型 | 特點 |
|---|---|
| 唯一索引 | 鍵值唯一,聚集/非聚集均可創建 |
| 包含列索引 | 非聚集索引擴展非鍵列(INCLUDE),專為覆蓋查詢設計 |
| 索引覆蓋 | 查詢所需列全部在索引中,避免回表/鍵查找 |
ALTER INDEX ... REBUILD 或 CREATE INDEX ... WITH DROP_EXISTING。FILLFACTOR(預留空間減少分裂)、SORT_IN_TEMPDB、STATISTICS_NORECOMPUTE。ROWID 指向表行。| 維度 | SQL Server | Oracle |
|---|---|---|
| 數據物理順序 | 聚集索引決定 | 無序,堆表 |
| 聚集索引 | 核心概念,每表一個 | 無(IOT 類似但罕用) |
| 非聚集索引葉級 | 鍵值 + RID/聚集鍵 | 鍵值 + ROWID |
| 覆蓋索引實現 | INCLUDE 列 | 組合索引包含所有查詢列 |
| 碎片整理 | REBUILD/REORGANIZE | REBUILD / COALESCE / SHRINK SPACE |
| 統計信息收集 | 自動/手動 UPDATE STATISTICS | DBMS_STATS.GATHER_* 自動任務 |
INCLUDE 列 → Oracle 組合索引順序調整(選擇性高的列前置)。CLUSTERING_FACTOR(索引順序與表數據順序一致度),SQL Server 關注碎片率與填充因子。AUTO_INDEXING(19c+);SQL Server 配置索引維護計劃(Ola Hallengren 腳本)。深刻理解兩種索引架構的本質差異,是跨平台 SQL 調優、架構遷移、混合雲部署的核心竞争力。