標籤:com 不同 支援 資料 key class 獨立 col mysq
聚簇索引就是對磁碟上的實際資料重新組織以按照特定的一個或者多個列的值排序的演算法
特點是儲存資料的順序和索引順序一致 一般情況下主鍵會預設產生聚簇索引 且一張表有且只有一個聚簇索引
聚簇索引和非聚簇索引的區別是:
聚簇索引的葉子節點就是資料節點 而非聚簇索引的葉子節點仍然是索引檔案 只是這個索引檔案中包含指向對應資料區塊的指標
MySQL中不同的資料存放區引擎對聚簇索引有不同的支援
MyISAM使用的是非聚簇索引
未經處理資料
儲存方式
按照列值和行號來組織索引的 葉子節點中儲存的實際上是指向存放資料區塊的指標
從物理檔案中也可以看出 MyISAM的索引檔案.MYI和資料檔案.MYD是分開儲存的 是相對獨立的
對於InnoDB引擎來說,是按照聚簇索引的形式儲存資料
它的每個聚簇索引的葉子節點都包含主索引值、事務ID、復原指標(用於事務和MVCC)以及餘下的列。
從物理檔案也可以看出 InnoDB的資料檔案只有資料結構檔案.frm和資料檔案.idb 其中.idb中存放的是資料和索引資訊 是存放在一起的
InnoDB的二級索引和主鍵索引也有很大的不同 二級索引存放的是主索引值而不是行指標 減少了移動資料或者分裂時維護二級索引的開銷,因為不需要更新索引的行指標
MyISAM和InnoDB的二級索引的對比
可以看出 InnoDB二級索引的葉子節點存放的是KEY欄位+主索引值,因此首先通過二級索引尋找到的是主索引值,再根據主索引值在朱建索引中尋找到相應的資料檔案。
而MyISAM的二級索引存放的還是列值和行號的組合 葉子節點中儲存的是指向物理資料的指標,因此它的主建索引和二級索引的結構並沒有任何區別,只是說主鍵索引的索引值是唯一且非空的,而MyISAM引擎可以不設定主鍵。
InnoDB引擎是必須設定主鍵的,需要依賴主鍵產生聚簇索引,因此當沒有指定主鍵的時候,InnoDB引擎會預設尋找一個可以唯一標識每行資料的列作為主鍵,當這種列不存在的時候,會預設產生一個6位元組整型的隱藏列作為主鍵
mysql索引總結(2)-MySQL聚簇索引和非聚簇索引