innodb中的索引主要分為三種:
B+樹索引
全文索引
哈希索引
B+樹索引
B+樹索引基于B+樹愉择,信息儲(chǔ)存在葉子節(jié)點(diǎn)氮块,其他節(jié)點(diǎn)只包含鍵值的信息。數(shù)據(jù)庫通過B+樹找到被查詢數(shù)據(jù)所在頁校哎,將頁讀取到內(nèi)存中后两波,再進(jìn)行查找瞳步。
innodb中的B+樹索引分為聚簇索引和非聚簇索引(又稱輔助索引)闷哆,兩者區(qū)別在于**葉子節(jié)點(diǎn)是否存在一整行信息**。
聚簇索引
聚簇索引按照每張表的主鍵建B+樹单起,樹的葉子節(jié)點(diǎn)存放著整張表的行記錄數(shù)據(jù)抱怔,因此也將聚簇索引的葉子節(jié)點(diǎn)稱為數(shù)據(jù)頁,葉子節(jié)點(diǎn)的數(shù)據(jù)頁通過雙向鏈表進(jìn)行連接嘀倒。
由于數(shù)據(jù)的排列只有一種屈留,因此一張表只能擁有一個(gè)聚簇索引。
非聚簇索引
非聚簇索引的葉子節(jié)點(diǎn)不包含行記錄信息测蘑,包含的是行記錄對(duì)應(yīng)的主鍵值灌危。通過非聚簇索引查詢時(shí),會(huì)首先找到行記錄對(duì)應(yīng)的聚簇索引碳胳,再通過聚簇索引找到對(duì)應(yīng)的行記錄勇蝙。因此一張表可以存在多個(gè)非聚簇索引。
常見的非聚簇索引包括**單列索引挨约、聯(lián)合索引**味混。單列索引就是常見的單列但不是聚簇索引的索引,聯(lián)合索引指對(duì)表上的多個(gè)列建立索引诫惭,聯(lián)合索引也是一棵B+樹翁锡,但是B+樹的鍵值的數(shù)量不是1,而是大于1(即聯(lián)合索引的列)夕土。
因此馆衔,對(duì)于聯(lián)合索引,必須按照建立索引的順序進(jìn)行查詢,否則索引會(huì)失效哈踱。
另外荒适,innodb還支持覆蓋索引,即通過查詢非聚簇索引即可獲取到需要的所有信息开镣,而不需要回表查詢(重新通過聚簇索引查詢)刀诬,這種方式能夠提高檢索速度,且大小遠(yuǎn)小于聚簇索引邪财。
全文索引
全文索引通常通過倒排索引實(shí)現(xiàn)陕壹,即,將文章中的每個(gè)單詞作為key树埠,將這個(gè)單詞出現(xiàn)的行(可能再加上是第幾個(gè)單詞)這些坐標(biāo)信息作為value糠馆,構(gòu)建映射關(guān)系。
哈希索引
哈希索引是innodb系統(tǒng)自適應(yīng)生成的怎憋,不能人工干預(yù)