MySql中varchar(10)和varchar(100)的區別和優缺點

背景

許多使用MySQL的同窗都會使用到varchar這個數據類型。初學者剛開始學習varchar時,必定記得varchar是個變長的類型這個知識點,因此不少初學者在設計表時,就會把varchar(X)的長度設置的很是長,目的也是爲了保證之後有更長的數據存儲時,能更好的兼容。java

因而原本varchar(10)就能夠知足當前的存儲的長度需求了,改爲了varchar(100)。性能

那麼疑問來了:學習

既然是變長類型,varchar(10)和varchar(100)有什麼區別?

先舉個例子:若是要存儲'hello12345'這個字符串,使用varchar(10)varchar(100)存儲,佔用磁盤空間是同樣的麼?設計

答案是:佔用磁盤的存儲空間是同樣的。code

既然存儲時磁盤佔用空間同樣,還有什麼其餘的區別嗎?排序

雖然使用varchar(100)varchar(10)存儲'hello12345'字符串佔用的磁盤空間同樣,可是消耗的內存不同,更長的列消耗的內存會更多。由於MySQL一般會分配固定大小的內存塊來保存內部值。尤爲是使用臨時表進行排序會操做時,會消耗更多的內存。在使用磁盤進行排序時,也是同樣。內存

因此此時varchar(100) 會消耗更多的內存。字符串

varchar(10)和varchar(100)的優劣勢是什麼?

由於涉及到文件排序或者基於磁盤的臨時表時,更長的列會消耗更多的內存,因此在使用使用時,咱們不能太過浪費內存空間,仍是須要評估實際使用的長度來設置字符的長度。推薦冗餘10%的長度(因業務而異)。class

所使用varchar(10)會更加節約內存空間,可是實際業務中字符長度一旦超過10就須要更改表結構,在表數據量特別大時,不易拓展數據類型

而這時使用更長的列:varchar(100)無需更改表結構,業務拓展性更好

參考: 《高性能MySQL第3版》第四章

歡迎關注我我的公衆號:java之旅

相關文章
相關標籤/搜索