我們通過讀和寫兩個(gè)場景分開討論
讀場景:
通過B+樹從根節(jié)點(diǎn)開始層序遍歷到葉子結(jié)點(diǎn),數(shù)據(jù)頁內(nèi)部通過二分搜索
普通索引:查到滿足的第一條記錄,繼續(xù)查找下一條記錄,直到找到不滿足條件的記錄
唯一索引:查到第一個(gè)滿足條件的記錄,就停止搜索。普通索引比唯一索引就多了查找和判斷下一條記錄的操作,如果相同普通索引的數(shù)據(jù)很多,那么這個(gè)查找和判斷會(huì)進(jìn)行很多次
所以在讀場景唯一索引比普通索引性能要好(只要不經(jīng)過磁盤,差距不是很大)
寫場景:
假如需要在6和15之間插入12索引值
目標(biāo)頁在buffer中
普通索引 搜索到6和15之間的位置,然后插入
唯一索引 搜索到6和15之間的位置,首先需要判斷是否key沖突,沒有沖突,然后插入目標(biāo)頁不在buffer中
普通索引 將更新記錄寫入change buffer
唯一索引 將數(shù)據(jù)頁讀入buffer,需要判斷是否key沖突,沒有沖突,然后插入在數(shù)據(jù)不在buffer中時(shí),唯一索引需要磁盤加載數(shù)據(jù)判斷數(shù)據(jù)沖突,這時(shí)是隨機(jī)I/O,性能比較差,而普通索引使用change buffer就可以避免這種隨機(jī)磁盤訪問
所以在寫場景中普通索引比唯一索引性能要好
總結(jié):
寫操作比較多的場景建議使用普通索引,唯一性通過應(yīng)用層保證普通索引能滿足要求,盡量選用普通索引 ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。