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