1. 程式人生 > >設計 MySQL 數據表的時候一般都有一列為自增 ID,這樣設計原因是什麽,有什麽好處?

設計 MySQL 數據表的時候一般都有一列為自增 ID,這樣設計原因是什麽,有什麽好處?

數據表 問題 innodb unique uuid 定義 記錄 原因 指向

知乎采集:

MyISAM/InnoDB默認用B-Tree索引(可理解為"排好序的快速查找結構")。

InnoDB中,主索引文件上直接存放該行數據,稱為聚簇索引。次索引指向對主鍵的引用;
MyISAM中,主索引和次索引,都指向物理行(磁盤位置);

註意: 對InnoDB來說
1: 主鍵索引既存儲索引值,又在葉子中存儲行的數據;
2: 如果沒有定義主鍵,則會使用非空的UNIQUE鍵做主鍵 ; 如果沒有非空的UNIQUE鍵,則系統生成一個6字節的rowid做主鍵;

聚簇索引中,N行形成一個頁。如果碰到不規則數據插入時,會造成頻繁的頁分裂(因為索引要排好序),插入速度比較慢。所以聚簇索引的主鍵值應盡量是連續增長的值,而不是隨機值(不要用隨機字符串或UUID),否則會造成大量的頁分裂與頁移動。

故對於InnoDB的主鍵,盡量用整型,而且是遞增的整型。這樣在存儲/查詢上都是非常高效的。

作者:阿烈
鏈接:https://www.zhihu.com/question/28703540/answer/41805377
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 InnoDB 使用兩種索引來組織數據,Clustered Index 和 Second Index
Clustered Index 與 主鍵有千絲萬縷的關系,可以簡單認為是相等關系,數據存儲會按照主鍵來進行排序。
如果在建表的時候不提供主鍵,InnoDB 會自動生成一個主鍵,這個主鍵是字符式的,所以當有新數據進來的時候,原先的排序會被打亂,中間的開銷會很高。簡單說就是那棵樹的左旋右旋,很麻煩。
使用自增 ID 充當主鍵,就可以解決這個問題了,相應的 Second Index 的查詢效率也會變高

作者:匿名用戶
鏈接:https://www.zhihu.com/question/28703540/answer/41794747
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 不談高逼格東西,從普通人角度來認識。一,id,如同身份證號,名字可以重復,但身份證號是唯一的;二,自動增長,從編程角度來說,更簡便,不用花心思去管這塊了;三,優勢呢,兩個表關聯,可能用到id,查找記錄,可能用到id,就把它當警察叔叔通過身份證號碼來找你一樣性質——沒身份證號碼,天不會塌,但會亂。。。

作者:沈磊
鏈接:https://www.zhihu.com/question/28703540/answer/41864615
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

設計 MySQL 數據表的時候一般都有一列為自增 ID,這樣設計原因是什麽,有什麽好處?