為什么mysql的索引使用B+樹而不是B樹呢??
(1)B+樹更適合外部存儲(一般指磁盤存儲),由于內(nèi)節(jié)點(diǎn)(非葉子節(jié)點(diǎn))不存儲data,所以一個節(jié)點(diǎn)可以存儲更多的內(nèi)節(jié)點(diǎn),每個節(jié)點(diǎn)能索引的范圍更大更精確。也就是說使用B+樹單次磁盤IO的信息量相比較B樹更大,IO效率更高。
(2)mysql是關(guān)系型數(shù)據(jù)庫,經(jīng)常會按照區(qū)間來訪問某個索引列,B+樹的葉子節(jié)點(diǎn)間按順序建立了鏈指針,加強(qiáng)了區(qū)間訪問性,所以B+樹對索引列上的區(qū)間范圍查詢很友好。而B樹每個節(jié)點(diǎn)的key和data在一起,無法進(jìn)行區(qū)間查找
mysql 一個主鍵索引 a 兩個非主鍵索引 b c
那么當(dāng)我們根據(jù)b刪除的一條記錄的時(shí)候會先加鎖b 在鎖a 不會鎖住c
如果我們根據(jù)a刪除,那么只會鎖住b 不會鎖其他索引