mysql主鍵自增為什麼比隨機和自定義快?

2021-09-11 20:43:30 字數 373 閱讀 7883

1、如果表使用自增主鍵,那麼每次插入新的記錄,記錄就會順序新增到當前索引節點的後續位置,當一頁寫滿,就會自動開闢乙個新的頁

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

聚集索引就是主鍵索引

非聚集索引就是 聯合索引

主鍵索引 節點存放資料

非主鍵索引存在 主鍵索引的id 然後再查一遍主鍵索引

mysql為什麼建議使用自增主鍵

前面我寫了幾篇關於 mysql 索引的文章,索引是 mysql 非常重要的一部分。你也可能經常會看到一些關於 mysql 軍規 mysql 查詢優化的文章,其實這些操作的背後都是基於一定的原理的,你要想明白這些原理,首先就得知道 mysql 底層的一些東西。我在這裡舉幾個例子吧。我們都知道表的主鍵一...

為什麼mysql自增主鍵不是連續的

目錄 提出這個問題,是因為在工作中發現 mysql 中的 user 表的 id 預設是自程式設計客棧增的,但是資料庫儲存的結果卻不是連續的。user 表結構 create table user id bigint 20 unsigned not null auto increment comment...

MySQL為什麼需要乙個主鍵(自增長)

主鍵自增長 alter table sys manager modify user id integer auto increment 表中每一行都應該有可以唯一標識自己的一列 或一組列 乙個顧客可以使用顧客編號列,而訂單可以使用訂單id,雇員可以使用雇員id 或 雇員社會保險號。主鍵 primar...