日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL / 为什么需要主键?主键为什么最好是单调递增的?

發布時間:2024/10/14 数据库 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL / 为什么需要主键?主键为什么最好是单调递增的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?無特殊需求下 Innodb 建議使用與業務無關的自增 ID 作為主鍵。

? ? ? ?InnoDB引擎使用聚集索引數據記錄本身被存于主索引(一顆 B + Tree)的葉子節點上,這就要求同一個葉子節點內(大小為一個內存頁或磁盤頁)的各條數據記錄按主鍵順序存放。因此每當有一條新的記錄插入時,MySQL 會根據其主鍵將其插入適當的節點和位置,如果頁面達到裝載因子(InnoDB 默認為 15 / 16 ),則開辟一個新的頁(節點)。

? ? ? ?1、如果表使用自增主鍵,那么每次插入新的記錄,記錄就會順序添加到當前索引節點的后續位置,當一頁寫滿,就會自動開辟一個新的頁。

? ? ? ?這樣就會形成一個緊湊的索引結構,近似順序填滿。由于每次插入時也不需要移動已有數據,因此效率很高,也不會增加很多開銷在維護索引上

? ? ? ? 2、 如果使用非自增主鍵(如果身份證號或學號等),由于每次插入主鍵的值近似于隨機,因此每次新紀錄都要被插到現有索引頁得中間某個位置:此時 MySQL 不得不為了將新記錄插到合適位置而移動數據,甚至目標頁面可能已經被回寫到磁盤上而從緩存中清掉,此時又要從磁盤上讀回來,這增加了很多開銷,同時頻繁的移動、分頁操作造成了大量的碎片,得到了不夠緊湊的索引結構,后續不得不通過OPTIMIZE TABLE 來重建表并優化填充頁面。

? ? ? ?在使用 InnoDB 存儲引擎時,如果沒有特別的需要,請永遠使用一個與業務無關的自增字段作為主鍵。

? ? ? ?mysql 在頻繁地更新、刪除操作,會產生碎片。而含碎片比較大的表,查詢效率會降低。此時需對表進行優化,這樣才會使查詢變得更有效率。

?

轉載于:https://www.jianshu.com/p/33b7b6e0a396

?

(SAW:Game Over!)

總結

以上是生活随笔為你收集整理的MySQL / 为什么需要主键?主键为什么最好是单调递增的?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。