在有候選碼做主鍵的情況下,是否有必要選擇乙個自增字段當主鍵?什麼時候選擇自增主鍵或使用uuid主鍵?

時間 2021-06-29 16:41:36

1樓:zhuqz

以下都是基於mysql資料庫來分析的:

無非就是兩方面考慮,業務和效能,先說答案再解釋,一般推薦整型自增方式,有例外但很少。

先說說業務方面的,就以你說的使用者名稱,裝置號舉例,現在看上去都是唯一的,就能保證以後不會變動?萬一哪天使用者有了改使用者名稱的需求,難道我們要把此使用者名稱關聯的所有表都更新一遍嗎?裝置號也許可以,但是誰也不敢百分百說業務就一定不會變,以防萬一,業務無關的最保險;

有人說了,業務無關的話,除了自增整型,其他隨機串也行啊,比如像題主提到的uuid之類的唯一隨機序列串,這就要從效能方面來考慮了。

1.整數資料型別處理起來比字串型別處理要快;

2.生成快,只要簡單加n即可,字串隨機生成要麻煩的多;

3.比較大小數字型別更快,排序、索引生成,查詢匹配都是比較來的;

4.空間占用少,除了主鍵占用空間少,如果你用的innodb引擎的話,自建索引占用空間也會少,因為自建索引裡都會存主鍵;

5.如果你是innodb引擎,隨機字串行主鍵插入慢;

6.如果你的資料有冷熱之分,隨機字串行查詢慢,原理同5一樣,後面會講為什麼;大部分應用都會有冷熱之分;

你還有什麼理由不使用自增呢?

當然有,不符合以上六條的就可以不用,比如你的資料數量極大,超出了自增最大值,你的資料沒有冷熱之分,這種情況比較少!

ps:下面來講講原理,自增主鍵本質是一種時間戳,記錄了執行的先後順序,不是具體時間,但和時間一樣它是連續的,所以如果是mysql的innidb引擎,資料是以主鍵聚簇索引的方式儲存的,按主鍵順序連續插入即可,對於有時間熱點的資料而言,查詢的也會是一段連續區域的資料,這有什麼好處呢?先來對比下隨機字串,隨機字串是隨機的,會雜湊到很大的乙個空間裡,對於innodb的聚簇索引插入是隨機的,所以熱點資料的儲存不連續,下面來做下物理分析。

資料是存在磁碟上的,機械磁碟順序訪問速度快,隨機訪問則慢的要死,資料在磁碟上不是一條一條的,而是很多條資料放一起以page方式訪問的,page大小都是一樣的,所以每個page能存多少條資料,取決於你每條資料的大小(所以資料型別長度小就有優勢了吧),即使你要讀取一條資料,資料庫也要先找到它所在的page,從page裡把它取出來,而開啟page都是要消耗時間的,說到這你就明白連續訪問與資料型別小的好處了吧!

所以設計資料庫盡量用能滿足需要的最小型別

在有女朋友的情況下,男性在什麼情況下會很珍惜和其他女性之間的友情?

啦啦啦 這個我不大清楚哎。我男朋友沒有異性朋友。唯一和他關係特別近的就是他表姐。我覺得我可以接受男朋友這些方面的異性朋友 1.工作上必須聯絡的 2.發小 從小認識但是互相沒感覺 但是其實我還是不大想接受這種的。但也沒辦法。畢竟早認識這麼多年。談個戀愛不要朋友這也說不過去 3.les 前女友 喜歡過沒...

在有諸多智慧型裝置的情況下,使用AC AP組網還是有線mesh組網?

徐濠 可以考慮入手mesh路由器組網 價效比高而且設定簡單 只要買幾台路由器接上網線就可以用 有些路由器品牌有推出系列款 購買後裡面有教程和設定一看就懂 如果不買系列款的路由器 建議入手同品牌的路由器 相容性更好點使用起來方便些 colaandice 沒有裝修前,做好規劃最重要。如果有吊頂,具備在吊...

在有重度抑鬱的情況下怎樣堅持讀完高中?

天天開心 其他的話不願多說,加油,不論堅持與否,不論你選擇了怎樣的活法,不論你是沉溺於孤獨還是喧囂,你要相信,生活會給勇者饋贈,加油,一定要對生活抱有希望,當你真正想要做某件事時,全世界都會幫助你,如果已經身在谷底,那麼不論走向何處都是前進。祝你安好。 沉魚兒 兩年前確診心境惡劣,重度抑鬱恢復之後反...