MySQL中采用類型varchar(20)和varchar(255)對性能上的影響


1.varchar(N)的邏輯意義
從MySQL4.1開始,varchar (N)中的N指的是該字段最多能存儲多少個字符(characters),不是字節數。
不管是一個中英文字符或者數字、或者一個漢字,都當做一個字符。在4.1之前,N表示的是最大存儲的字節數(bytes)。

 

2.MySQL建立索引時如果沒有限制索引的大小,索引長度會默認采用的該字段的長度,也就是說varchar(20)和varchar(255)對應的索引長度分別為20*3(utf-8)(+2+1),255*3(utf-8)(+2+1),其中"+2"用來存儲長度信息,“+1”用來標記是否為空,加載索引信息時用varchar(255)類型會占用更多的內存; (備注:當字段定義為非空的時候,是否為空的標記將不占用字節)例如,測試sql(InnoDB引擎)如下:

varchr(10)變長字段且允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(變長字段) 

varchr(10)變長字段且不允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+2(變長字段) 

char(10)固定字段且允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL) char(10)固定

字段且允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)根據這個值,就可以判斷索引使用情況,特別是在組合索引的時候,判斷所有的索引字段都被查詢用到。

2.varchar(20)與varchar(255)都是保持可變的字符串,當使用ROW_FORMAT=FIXED創建MyISAM表時,會為每行使用固定的長度空間,這樣設置不同的varchar長度值時,存儲相同數據所占用的空間是不一樣。

 

通常情況下使用varchar(20)和varchar(255)保持'hello'占用的空間都是一樣的,但使用長度較短的列卻有巨大的優勢。較大的列使用更多的內存,因為MySQL通常會分配固定大小的內存塊來保存值,這對排序或使用基於內存的臨時表尤其不好。同樣的事情也會發生在使用文件排序或者基於磁盤的臨時表的時候。

 

原文:https://blog.csdn.net/liqfyiyi/article/details/77868924


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM