我正在优化数据库,并且有一些我不清楚固定长度数据类型的东西.
据我所知,这些数据类型是固定长度的:
这些是可变长度的:
如果我错了请纠正我!
现在,我的问题是:这些数据类型是固定长度还是可变长度?
谢谢.
bas*_*sh- 12
您在某些数据类型上不正确.
DATETIME/TIMESTAMP
TIMESTAMP
并且DATETIME
类似,但与之相比,TIMESTAMP仅使用了一半的存储空间DATETIME
.但是使用它有明显的缺点,TIMESTAMP
所以你应该查看官方文档,看看你需要哪一个.但大多数DATETIME
人都是更好的选择.
您不必担心此数据类型的修复/变量长度
NUMBERS
您可以通过设置长度来存储整数,int(20)
但就存储而言,它没有差异,因此没有意义.
TINYINT SMALL INT MEDIUMINT BIGINT
这些数据类型分别需要8,16,24,32和64位存储空间.每个都有不同的最大值和最小值.如果您确定您的值不会超过某个数字,则应选择最小的int数据类型以节省空间并提高性能.您应该查阅官方文档以获取有关这些数字的更多信息.
FLOAT
并且DOUBLE
是近似计算,您不必指定精度.设置精度并插入超出规范的值,您的值将四舍五入到规范.再次看到官方文档.
VARCHAR
VARCHAR
,正如您所期望的那样是可变长度,但请记住,不要指定类似于VARCHAR(100)
您只需要5个字符的内容,因为虽然存储在磁盘上时长度是可变的,但它需要您在使用RAM时指定的长度,因此你会浪费宝贵的记忆.
BLOB和TEXT
BLOB
并TEXT
根据您使用的存储引擎以特殊方式存储.它们通常存储在"外部"区域中.除非字符串很长,否则应该避免使用它.此数据类型无法索引整个长度,也不受内存支持,因此系统内存不使用该数据类型.在调用它时,将使用MyISAM存储引擎在磁盘上创建临时表,这将导致性能大幅下降.
ENUM
这非常紧凑,您可以在创建表时将特定值设置为字段.字符串是固定的,更改ENUM
列需要一个ALTER TABLE
,所以你不必担心这个字符串的修复/变量长度.
编辑:
我在官方文档中找到了一个页面,它回答了您的所有问题数据类型存储要求