mysql索引總結(2)-MySQL聚簇索引和非聚簇索引

來源:互聯網
上載者:User

標籤: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聚簇索引和非聚簇索引

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.