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