mysql在创建表的时候定义表的性质,共有三种:静态表,动态表,压缩表。默认是静态表,如果存在varchar、blob、text字段,表类型就是动态了。
1.静态表:
字段有固定长度,例如:char(20)。如果使用gbk字符集存储中文username,将占用40byte,如果username的实际内容没有达到40byte,将会填充空格,以达到40byte。速度很快,因为mysql知道username总是从第41个字节开始,容易缓存,出现问题后也容易恢复(mysql知道记录的确切位置),需要更多的硬盘空间(如果有三个上面的字段,一条记录就会占120字节,即使实际只用了其中一部分)
2.动态表:
字段不定长(变长),这种表格式比较节省空间,但是复杂度更高,每条记录都有一个header,作用就是表明该记录有多长,所有的字符串列都是动态的(除非小于4个字节,这种情况下,节省的空间可以忽略不计,增加的复杂度会反而会导致性能丢失),通常占用比静态表少的多地空间,但是必须经常维护(避免碎片),例如:更新了用户名somebody为somebodyt,t不能立刻就出现在y的后面,因为空间被其他记录占用,对于出现碎片的列,每个新连接会损失6个字节。而且出现问题后不容易重建(前面我说的静态表正好相反),如果碎片严重,有可能出现库爆炸(^_^).
不包括连接的动态记录的空间消耗可以用下面的公式计算:
3+(列数+7)/8+(字符列数)+数字列的打包尺寸+字符串长度+(空列的数量+7)/8
每条记录的header可以表明那个字符串列是空的,那个数字列包含0(非空),在那种情况下不向磁盘存储,非空字符串包含一个长度字节加上字符串内容。
压缩表:
只读,使用很少的空间,用myisampack工具创建,表要少得多,每条记录分开压缩,所以不能同时访问,可以压缩静态表和动态表。
创建方法:myisampack [options] filename
你大体上可以看出来,具体的计算空间不容易,只要根据不同的表特点选择数据库就可以了。
alter mysql table 列类型 mysql表格类型
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java 如何读取mysql的datetime类型的值
java 如何读取mysql的datetime类型的值
java 日期时间 MySQL -
MySQL 给用户添加 ALTER VIEW 的权限
在某些情况下,需要为用户添加特定的权限,例如 ALTER VIEW 权限,以允许他们修改视图。
数据库 MySQL 数据 ALTER VIEW 视图 -
[MySQL] alter table 增加、删除、修改字段类型
经常需要手动增加、删除、修改mysql表的字段类型,可以参考下面的例子:
MySQL 字段 官网 开发环境 修改字段 -
MySQL 类型表 mysql表格类型
·AutoField ·一个根据实际ID自动增长的IntegerField,通常不指定如果不指定,一个主键字段将自动添加到模型中 ·C
MySQL 类型表 字段 Python 表单