hash索引和b?
Hash索引與B+樹索引的區(qū)別
由于Hash索引結(jié)構(gòu)和B+ 樹不同,因此在索引使用上也會(huì)有差別:
(1)Hash索引不能進(jìn)行范圍查詢,而B+樹可以。
這是因?yàn)镠ash索引指向的數(shù)據(jù)是無(wú)序的,而B+ 樹的葉子節(jié)點(diǎn)是個(gè)有序的鏈表。
(2)Hash索引不支持聯(lián)合索引的最左側(cè)原則(即聯(lián)合索引的部分索引無(wú)法使用),而B+樹可以。
對(duì)于聯(lián)合索引來(lái)說(shuō),Hash索引在計(jì)算Hash值的時(shí)候是將索引鍵合并后再一起計(jì)算Hash值,所以不會(huì)針對(duì)每個(gè)索引單獨(dú)計(jì)算Hash值。因此如果用到聯(lián)合索引的一個(gè)或多個(gè)索引時(shí),聯(lián)合索引無(wú)法被利用。
(3)Hash索引不支持Order By排序,而B+樹支持。
因?yàn)镠ash索引指向的數(shù)據(jù)是無(wú)序的,因此無(wú)法起到排序優(yōu)化的作用,而B+樹索引數(shù)據(jù)是有序的,可以起到對(duì)該字段Order By 排序優(yōu)化的作用。
(4)Hash索引無(wú)法進(jìn)行模糊查詢。而B+ 樹使用 LIKE 進(jìn)行模糊查詢的時(shí)候,LIKE后面前模糊查詢(比如%開(kāi)頭)的話可以起到優(yōu)化的作用。
(5)Hash索引在等值查詢上比B+樹效率更高。
不過(guò)也存在一種情況,就是索引列的重復(fù)值如果很多,效率就會(huì)降低。這是因?yàn)橛龅紿ash沖突時(shí),需要遍歷桶中的行指針來(lái)進(jìn)行比較,找到查詢的關(guān)鍵字非常耗時(shí)。所以Hash索引通常不會(huì)用到重復(fù)值多的列上,比如列為性別,年齡等。