MYSQL字符类型
标签(空格分隔): 高性能MYSQL 第四章 schema与数据类型 字符类型
- ###VARCHAR和CHAR 值的存储与具体的存储引擎有关,下面以InnoDB为例说明
###1.1. VARCHAR 这长字符串,需要1或2个额外的字节记录字符长度。VARCHAR(10) 11byte,VARCHAR(1000) 1001byte。update时可能使行变得更长,消耗较大。
适用:
1. 字符串值的最大长度比平均长度大得。
2. 列的更新少
###1.2.CAHR
定长字符串。当值不足指定长度时,会以空格填充,所以不能识别末尾处的空格,相当于删除末尾空格。
适用:
1. 值短
2. 所有的值长度接近
3. 经常变更
VARCHAR(5)、VARCHAR(200)哪个来存储"HELLO"更有优势?
VARCHAR(5)更好,因为MYSQL会分配固定的大小的内存块来保存内部值。尤其是使用(内存、磁盘)临时表进行排序和操作时,会浪费大师内存。
- ###VBLOB和TEXT 字符类型:TINGTEXT SMALLTEXT TEXT MEDIUMTEXT LONGTEXT SMALLTEXT TEXT是同义词
二进制类型:TINGBLOB SMALLBLOB BLOB MEDIUMBLOB LONGBLOB BLOB SMALLBLOB是同义词
###2.1. MYSQL把BLOB和TEXT值当作一个独立的对象处理。 值太大时,InnoDB会使用专门的“外部”存储区域进行存储,此时每个值在行内需1~4个字节存储一个指针
###2.2. 只对每列的最前max_sort_length做排序,也可以使用order by substring(cloumn ,length)。
技巧:使用order by substring减少临时表的空间
- ###使用杖举(ENUM)代替字符串 数据实际存储为整数,在表的.frm文件中存在“数字-字符串”的映射,且排序也是按内部整数排序。排序问题可以用order by field([field])解决