MySQL
MySQL索引的種類
- 按照索引列值的唯一性:索引可分為唯一索引和非唯一索引;
唯一索引:此索引的每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄,對于單列唯一性索引,這保證單列不包含重復(fù)的值。對于多列唯一性索引,保證多個值的組合不重復(fù)。主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。 - 索引列的個數(shù):單列索引和復(fù)合索引;
- 按照索引列的物理組織方式:聚集索引和非聚集索引 (主鍵的B+Tree就是聚集索引)
聚集索引(也叫聚簇索引)中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。 如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數(shù)據(jù)訪問速度。
InnoDB的主鍵索引
MyISAM不管是主鍵索引,唯一鍵索引,或者普通索引,其索引均屬于稀疏索引。而InnoDB必須有且僅有一個密集索引,這個密集索引的選取規(guī)則如下:
- 若一個主鍵被定義,該主鍵則作為密集索引;
- 若沒有主鍵被定義,該表的第一個唯一非空索引則作為密集索引;
- 若不滿足以上條件,InnoDB內(nèi)部會生成一個隱藏主鍵(密集索引),這個隱藏的主鍵是一個6字節(jié)的列,該列的值會隨著數(shù)據(jù)的插入而自增,也就是說,我們的InnoDB必須有一個主鍵,而該主鍵就必須作為唯一的密集索引而存在。那為什么它一定要有主鍵索引呢?看第4點;
- 非主鍵索引存儲相關(guān)鍵位和其對應(yīng)的主鍵值,包含兩次查找。非主鍵索引,即稀疏索引的葉子節(jié)點并不存儲行數(shù)據(jù)的物理地址,而是存儲該行的主鍵值,所以非主鍵索引包含了兩次查找,一次是查找次級索引之身,然后再查找主鍵,
根據(jù)該圖,我們知道InnoDB會有一個密集索引,將主鍵組織到一顆B+樹中,而行數(shù)據(jù)就存儲在葉子節(jié)點上,因為InnoDB的主鍵索引和對應(yīng)的數(shù)據(jù)是保存在同一個文件當(dāng)中的,所以呢,檢索的時候,在加載葉子節(jié)點的主鍵進(jìn)入內(nèi)存的同時,也加載了對應(yīng)的數(shù)據(jù)。即若使用“where id =14“這樣的條件查詢主鍵,則按照B+樹的檢索算法即可查找到對應(yīng)的葉子節(jié)點,并獲得對應(yīng)的行數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-660859.html
若對稀疏索引進(jìn)行條件篩選,文章來源地址http://www.zghlxwxcb.cn/news/detail-660859.html
到了這里,關(guān)于MySQL索引&ES索引的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!