| 維度 | 聚集索引 | 非聚集索引 |
|---|---|---|
| 定義 | 索引鍵值邏輯順序決定表數據行物理存儲順序 | 僅對數據列建立索引,不影響表物理存儲順序 | 別名 | 聚簇索引 | 二級索引 / 輔助索引 |
| 每表數量 | 最多 1 個 | 可建多個 |
| 葉子節點內容 | 完整行數據 | 索引列值 + 主鍵值(回表查詢) |
PRIMARY KEYNOT NULL UNIQUE 索引ROWID(6 字節單調遞增)因此:**InnoDB 表必須有主鍵,強烈建議使用自增整數主鍵**。
[根節點] → [分支節點] → [葉子節點] 葉子節點 key = 主鍵值 葉子節點 value = 其餘列數據 + ROWID + rollback_pointer + trx_id
結論:InnoDB 表中,聚集索引即整張表,整張表即聚集索引。
| 場景 | InnoDB (IOT) | MyISAM (HOT) |
|---|---|---|
| 範圍查詢 | 極快(葉子節點鏈表順序讀取) | 需回表,隨機 I/O 多 |
| 頻繁更新 | 不易產生碎片(主鍵不變) | 易產生行遷移、碎片 |
| 熱點數據 | 適合小範圍高頻讀寫 | 無優勢 |
| 主鍵訪問 | 單次 B+ 樹查找直達數據 | 需兩次查找(索引→數據) |
| 離散寫入 | 頁分裂頻繁,效能下降 | 順序追寫,效能穩定 |
| 索引回表開銷 | 無(主鍵查詢) | 大(每次需回表) |
BIGINT UNSIGNED AUTO_INCREMENTUsing index),減少回表