MySQL數(shù)據(jù)表中,用戶id這樣的自增字段,應(yīng)該是數(shù)字型還是字符型?各有什么優(yōu)缺點?
問題描述
如題,設(shè)計一張表,id這種自增字段該怎么選擇類型?
問題解答
回答1:用自增的整數(shù)。
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT
id一般來說不會是負數(shù),所以用UNSIGNED。 id相當于身份證,不應(yīng)該也不能是NULL。 至于為什么是整數(shù),和兩個因素有關(guān):
占用空間。
效率。
MySQL的AUTO_INCREMENT不支持字符型。占用空間不用多說, INT類型固定只占用4個字節(jié),能表示的范圍達到了-2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) ,設(shè)為非負之后翻倍,而使用字符串想要表示這么大量的數(shù)據(jù)...
效率則和索引的結(jié)構(gòu)有關(guān),MySQL使用B+樹作為索引的數(shù)據(jù)結(jié)構(gòu),如果使用自增整數(shù)的話,插入數(shù)據(jù)時最多只會引起節(jié)點的分裂,而使用字符串則有可能會插入到任何地方,這意味著可能會引起節(jié)點的移動和分裂。其次是在數(shù)據(jù)查詢的時候,字符串的比較也要比整數(shù)的比較慢。
更多信息可以參考這個: 自增主鍵是否會降低數(shù)據(jù)庫insert性能?如果會的話為什么還有很多公司采用?
最后: 我支持主鍵與具體數(shù)據(jù)無關(guān)= =.. 所以用整數(shù)最為主鍵是比較不錯的選擇。
回答2:數(shù)字型方便索引
