最近在看mysql優化視頻及各方帖子,其中有建議爲字段選取合適的整型類型,在看int、bigint、smallint 和 tinyint的選取的時候有點迷惑,剛剛弄清楚,這裏分享一下mysql
這裏先得說下基礎知識,1字節(Byte)佔8個位(bit),1個位表示一個二進制的0或者1,sql
1個字節能表示最大的整數是255,怎麼來的?數據庫
1個字節就是8個二進制的1 「11111111」 轉換成十進制就是255mysql優化
int類型佔4個字節,就是4*8=32位,能表示最大的整數是多少? 數據庫設計
11111111 11111111 111111111 11111111 ide
轉換爲十進制就是4294967295 ,不信你本身在表裏面某int類型的字段裏面手動寫入一 個4294967296,保存完了再打開又給你退回到4294967295了。優化
而後咱們引伸出另外一個詞:符號。設計
帶符號的int類型,表示的範圍是-2147483648到2147483647(在這個範圍裏面能表示4294967295個 數字),不帶符號的int類型範圍是0到4294967295,帶不帶符號其實int能表示的數字的"寬度"不 變,只不過帶符號就是用0作爲中分點。視頻
下面就能觸類旁通了 it
mediumint佔3個字節 ,"寬度"爲16777215 ,帶符號的以0作爲正負中分點
smallint佔2個字節,"寬度"爲65535
tinyint 佔1個字節 "寬度"255
明白這個咱們在之後的數據庫設計中就能更合理的爲字段選取整型類型了,好比在商城系統的訂單表裏,爲該表的主鍵應該選什麼合適?我以爲mediumint就夠了,在ecshop裏面,訂單表和商品表這兩個算是比較大的表了,其主鍵用的類型是mediumint。還有一些項目裏面會用到數據字典,或者說是類型表,這裏面的數據確定不會太多的時候,用tinyint足矣