唯一索引一定能提高性能嗎?并不是

我們通過讀和寫兩個(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ù)。

    相關(guān)閱讀更多精彩內(nèi)容

    友情鏈接更多精彩內(nèi)容