主鍵為聯合主鍵時,索引B+樹結構
根據下面建表語句,分析各個索引的結構組織:
CREATE TABLE `geek` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
`c` int(11) NOT NULL,
PRIMARY KEY (`a`,`b`),
KEY `c_index` (`c`),
KEY `ca_index` (`c`,`a`),
KEY `cb_index` (`c`,`b`)
) ENGINE=InnoDB;
主鍵(a,b)的索引結構:
主鍵 a,b 的聚簇索引組織順序相當於 order by a,b ,也就是先按 a 排序,再按 b 排序,c 無序。
ca_index的索引結構:
索引 ca_index的組織是先按 c 排序,再按 a 排序,同時記錄主鍵。**注意:**這裡主鍵記錄的欄位是b,而不是(a,b)。
c_index的索引結構:
與ca_index一樣,先按c排序,再按a排序,主鍵部分記錄的是b。
cb_index的索引結構:
先按c排序,在按b排序,主鍵部分記錄的是a。
可以看出,上面的建表語句中的ca_index其實沒有必要,因為它與c_index的結構完全一樣。
參考:
《MySQL實戰45講》
相關文章
- MySQL為什麼採用B+樹作為索引結構?MySql索引
- ClickHouse主鍵索引最佳實踐索引
- Mysql索引資料結構為什麼是B+樹?MySql索引資料結構
- 資料表設計之主鍵自增、UUID或聯合主鍵UI
- indexedDB 索引與primarykey主鍵區別Index索引
- 主鍵索引存的是行嗎?❌索引
- 為什麼選擇b+樹作為儲存引擎索引結構儲存引擎索引
- mysql刪除主鍵索引,刪除索引語法MySql索引
- impdp導致主鍵索引的變化索引
- [20210520]關於主鍵索引問題.txt索引
- Mysql關於自增主鍵,自增主鍵優化總結MySql優化
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- MySQL 聚簇索引一定是主鍵嗎MySql索引
- SQLSERVER 的主鍵索引真的是物理有序嗎?SQLServer索引
- 主鍵命名
- 主鍵和外來鍵
- MySQL索引為什麼使用B+樹?MySql索引
- 細分主鍵
- 主鍵分類
- 不要使用業務鍵作為資料庫主鍵資料庫
- 主鍵約束、唯一約束和唯一索引索引
- 一條主鍵索引SQL導致的CPU被打滿索引SQL
- 通過外來鍵找主鍵
- 通用mapper用oracle序列作為主鍵APPOracle
- 分散式主鍵生成分散式
- postgresql自增主鍵SQL
- 主鍵可以重複?
- 資料結構之「B+樹」資料結構
- 資料庫主鍵、從鍵(易懂版)資料庫
- mysql索引為啥要選擇B+樹 (下)MySql索引
- mysql索引為啥要選擇B+樹 (上)MySql索引
- 【MySQL】gh-ost改雙主表結構主鍵衝突問題MySql
- PostgreSQL中UUID v7作為主鍵SQLUI
- 搞懂MySQL InnoDB B+樹索引MySql索引
- 【資料結構】B樹、B+樹詳解資料結構
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- [譯]從磁碟結構到B+樹
- 檢視SQLSERVER主鍵列SQLServer