从开发者角度谈Mysql主键
轉載自?從開發者角度談Mysql主鍵
說在前面
零度mysql一直比較薄弱,俗話說的好,不會mysql的程序員不是好程序員,剛剛好認識mysql大牛劉龘劉,剛剛好就有了這些文章,主要是劉龘劉大牛寫的,零度稍微修改成文,零度覺得這系列文章非常不錯,可以從開發者角度看看mysql。
主題
使用自增主鍵的好處
使用非自增主鍵壞處
總結
使用自增主鍵的好處
那么每次插入新的記錄,記錄就會順序添加到當前索引節點的后續位置,當一頁寫滿,就會自動開辟一個新的頁
使用非自增主鍵壞處
由于每次插入主鍵的值近似于隨機,因此每次新紀錄都要被插到現有索引頁得中間某個位置,此時MySQL不得不為了將新記錄插到合適位置而移動數據,甚至目標頁面可能已經被回寫到磁盤上而從緩存中清掉,此時又要從磁盤上讀回來,這增加了很多開銷,同時頻繁的移動、分頁操作造成了大量的碎片,得到了不夠緊湊的索引結構,后續不得不通過OPTIMIZE TABLE來重建表并優化填充頁面。
總結
如果InnoDB表的數據寫入順序能和B+樹索引的葉子節點順序一致的話,這時候存取效率是最高的。也就是下面這幾種情況的存取效率最高:
使用自增列(INT/BIGINT類型)做主鍵,這時候寫入順序是自增的,和B+數葉子節點分裂順序一致;
該表不指定自增列做主鍵,同時也沒有可以被選為主鍵的唯一索引(上面的條件),這時候InnoDB會選擇內置的ROWID作為主鍵,寫入順序和ROWID增長順序一致;
如果一個InnoDB表又沒有顯示主鍵,又有可以被選擇為主鍵的唯一索引,但該唯一索引可能不是遞增關系時(例如字符串、UUID、多字段聯合唯一索引的情況),該表的存取效率就會比較差。
總結
以上是生活随笔為你收集整理的从开发者角度谈Mysql主键的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何检测电脑屏幕黑点如何查看电脑屏幕
- 下一篇: 并发场景下MySQL存在的问题及解决思路