問題場景
- 由于單表資料量達到千萬,且插入操作非常頻繁(uniqueId會影響插入性能),故想研究一下到底是uniqueID性能更加優秀還是自建普通索引更加優秀
- 文章參考極客時間《mysql實戰45講》
- =-=最近把之前寫在有道雲筆記上的mysql相關知識全部同步到csdn了=-=,學海無涯啊,繼續努力
1,結論先行
- 1,業務正确性優先,如果業務角度上不能保證或者業務就是需要資料庫來做唯一限制則優先考慮在資料庫角度上用unique限制保證行資料唯一性
- 2,在某些歸檔資料(已經確定沒有唯一鍵沖突的),要提高歸檔效率,可以考慮把表中的唯一是以改成普通索引
2,查詢過程
- 如果是普通索引,在根據索引查找到第一個資料的主鍵ID時繼續進行檢索看是否還有沒資料
- 如果是唯一索引,因為索引直接就進行了限制,是以在根據索引查找到第一個資料的時候就直接停止的搜尋
- 結論: 基本木有影響因為innodb的資料是按照資料頁進行讀取的,一般情況下第一種情況的時候,往後檢索的資料大多數時候也在一塊記憶體頁中。
3,更新過程
- 因為change buffer 的影響,非唯一性索引的效率會低于普通索引
- change buffer:https://dev.mysql.com/doc/refman/5.7/en/innodb-change-buffer.html