数据库存储问题
举例来说:建立了一个表,字段A,B,字段A是不可为空的,B可以空插入一条记录insertintotable(A,B)value(2,"str")和insertintota...
举例来说:建立了一个表,字段A,B,字段A是不可为空的,B可以空
插入一条记录
insert into table(A,B) value(2,"str")
和
insert into table(A) value(2)
上述两条记录占用的物理空间是不是一样的?
如果允许空(且实际中也通常是空的)的字段有10多个,要不要把这些字段独立出做一个表。我关注速度和存储效率。
我说的是mysql 展开
插入一条记录
insert into table(A,B) value(2,"str")
和
insert into table(A) value(2)
上述两条记录占用的物理空间是不是一样的?
如果允许空(且实际中也通常是空的)的字段有10多个,要不要把这些字段独立出做一个表。我关注速度和存储效率。
我说的是mysql 展开
1个回答
展开全部
对于固定表,每个字段占用的空间是固定的,对于整数类型的字段,无论数值是多大、多小占用字节数都相同,对于字符串字段,无论长度多长、多短占用的字节数都相同,长度超过字段定义宽度的部分无法存储,长度低于字段定义宽度的部分浪费。
对于动态表,里面字符串类型字段的长度会影响占用物理空间的大小,超过定义长度的仍然无法存储,但是存储内容低于定义最大长度的能节省空间。
一般情况下,只要表有一个字段是变成字符串类型(VARCHAR),那么这个表就是动态表,所有的字符串类型(CHAR)字段实际上都是变长的。相反,如果没有任何一个VARCHAR字段,那么这个表就是固定的。
对于动态表,可以节省存储空间,但是速度会变慢,道理很简单,特别是修改一个记录长度发生变化的时候,系统要做许多事情。
以上的动态和固定,都只针对字符串类型,如果你的表都是存储整数,那么肯定是固定的。无论存储的整数多大、多小,占用的空间都是一样的。
另外,对于允许为空的字段,该字段占用的空间要多一点,该类字段的物理存储中要多一个记录内容是否为空的地方。但是,对于允许为空的字段,如果是固定表、或者动态表的非字符串类型字段,其占用的空间是固定的,只有在动态表的字符串类型字段里面,为空的字符串要比有内容的字符串少占用空间。
对于动态表,里面字符串类型字段的长度会影响占用物理空间的大小,超过定义长度的仍然无法存储,但是存储内容低于定义最大长度的能节省空间。
一般情况下,只要表有一个字段是变成字符串类型(VARCHAR),那么这个表就是动态表,所有的字符串类型(CHAR)字段实际上都是变长的。相反,如果没有任何一个VARCHAR字段,那么这个表就是固定的。
对于动态表,可以节省存储空间,但是速度会变慢,道理很简单,特别是修改一个记录长度发生变化的时候,系统要做许多事情。
以上的动态和固定,都只针对字符串类型,如果你的表都是存储整数,那么肯定是固定的。无论存储的整数多大、多小,占用的空间都是一样的。
另外,对于允许为空的字段,该字段占用的空间要多一点,该类字段的物理存储中要多一个记录内容是否为空的地方。但是,对于允许为空的字段,如果是固定表、或者动态表的非字符串类型字段,其占用的空间是固定的,只有在动态表的字符串类型字段里面,为空的字符串要比有内容的字符串少占用空间。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询