mysql索引總結(1)-mysql 索引類型以及建立html
mysql索引總結(2)-MySQL聚簇索引和非聚簇索引mysql
mysql索引總結(3)-MySQL聚簇索引和非聚簇索引算法
mysql索引總結(4)-MySQL索引失效的幾種狀況
sql
聚簇索引就是對磁盤上的實際數據從新組織以按照特定的一個或者多個列的值排序的算法數據結構
特色是存儲數據的順序和索引順序一致 通常狀況下主鍵會默認生成聚簇索引 且一張表有且只有一個聚簇索引post
聚簇索引和非聚簇索引的區別是:mysql索引
聚簇索引(innobe)的葉子節點就是數據節點 而非聚簇索引(myisam)的葉子節點仍然是索引文件 只是這個索引文件中包含指向對應數據塊的指針url
MySQL中不一樣的數據存儲引擎對聚簇索引有不一樣的支持spa
MyISAM使用的是非聚簇索引指針
原始數據
存儲方式
按照列值和行號來組織索引的 葉子節點中保存的其實是指向存放數據塊的指針
從物理文件中也能夠看出 MyISAM的索引文件.MYI和數據文件.MYD是分開存儲的 是相對獨立的
對於InnoDB引擎來講,是按照聚簇索引的形式存儲數據
它的每一個聚簇索引的葉子節點都包含主鍵值、事務ID、回滾指針(用於事務和MVCC)以及餘下的列。
從物理文件也能夠看出 InnoDB的數據文件只有數據結構文件.frm和數據文件.idb 其中.idb中存放的是數據和索引信息 是存放在一塊兒的
InnoDB的二級索引和主鍵索引也有很大的不一樣 二級索引存放的是主鍵值而不是行指針 減小了移動數據或者分裂時維護二級索引的開銷,由於不須要更新索引的行指針
MyISAM和InnoDB的二級索引的對比
從圖中能夠看出 InnoDB二級索引的葉子節點存放的是KEY字段+主鍵值,所以首先經過二級索引查找到的是主鍵值,再根據主鍵值在朱建索引中查找到相應的數據文件。
而MyISAM的二級索引存放的仍是列值和行號的組合 葉子節點中保存的是指向物理數據的指針,所以它的主建索引和二級索引的結構並無任何區別,只是說主鍵索引的索引值是惟一且非空的,而MyISAM引擎能夠不設置主鍵。
InnoDB引擎是必須設置主鍵的,須要依賴主鍵生成聚簇索引,所以當沒有指定主鍵的時候,InnoDB引擎會默認尋找一個能夠惟一標識每行數據的列做爲主鍵,當這種列不存在的時候,會默認生成一個6字節整型的隱藏列做爲主鍵