1.分類
?一般分為聚集索引和非聚集索引很澄,二者一般采用B樹或者h(yuǎn)ash方法實(shí)現(xiàn)乳讥,但是較常用的是B樹(mysql默認(rèn)采用的聪舒,設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)可以選擇)昆雀,這里主要講采用B樹的方式鹦马。hash方法效果聽說(shuō)并不是很好。
聚集索引是采用B+樹實(shí)現(xiàn)忆肾,非聚集索引使用B-樹實(shí)現(xiàn)
2.區(qū)別
聚集索引:所有關(guān)鍵字記錄僅保存在葉子節(jié)點(diǎn)中(葉子節(jié)點(diǎn)中的多個(gè)關(guān)鍵字以鏈表連接),索引節(jié)點(diǎn)不保存記錄菱肖,僅保存索引關(guān)鍵字客冈,同一索引下的葉子節(jié)點(diǎn)按序存儲(chǔ),查找快稳强。但是主鍵上聚集索引插入操作時(shí)會(huì)比較慢场仲,因?yàn)橐容^所有葉子節(jié)點(diǎn)上主鍵是否有和插入的相同
非聚集索引:索引節(jié)點(diǎn)保存記錄的關(guān)鍵字,及指向該關(guān)鍵字的指針退疫,同一索引的記錄不按序存儲(chǔ)渠缕,查找慢。但是在主鍵上的聚集索引插入操作時(shí)只需要比較索引節(jié)點(diǎn)即可
3.適用場(chǎng)景
4.優(yōu)點(diǎn)
1)最大好處是可以加快檢索速度
2)在經(jīng)常分組或者排序字段上加索引褒繁,會(huì)提高檢索時(shí)間
3)創(chuàng)建唯一索引可以保證數(shù)據(jù)庫(kù)每一行數(shù)據(jù)的唯一性
4)通過(guò)使用索引亦鳞,可以在查詢的過(guò)程中,使用優(yōu)化隱藏器棒坏,提高系統(tǒng)的性能
5)可以加速表和表之間的連接燕差,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義
5.缺點(diǎn)
1)創(chuàng)建和維護(hù)索引都需要開銷
2)索引需要一定的物理空間開銷,尤其是聚集索引
3)增刪改時(shí)坝冕,索引要?jiǎng)討B(tài)維護(hù)
6.應(yīng)該在哪些列建立索引
1)經(jīng)常分組或排序的列
2)where子句的查詢屬性列上
3)經(jīng)常查詢的屬性列或者經(jīng)常按范圍查找的屬性列上
4)主鍵
7.哪些列不應(yīng)建立索引
1)僅有少量值的列上徒探,比如性別,只有男女
2)很少使用的列喂窟,建立索引可能會(huì)比不建立有更多的開銷
3)對(duì)text测暗、image、bit列上磨澡,這些列的數(shù)據(jù)量要么比較多碗啄,要么很少
4)修改較多,但是檢索較少的列上