Mysql 固定长度列的最有效数据类型
我正在设计我的数据库结构 有许多列是固定长度的,其中至少有一列是纯字母数字的 因此我想知道:Mysql 固定长度列的最有效数据类型,mysql,phpmyadmin,sqldatatypes,mysql-5.6,Mysql,Phpmyadmin,Sqldatatypes,Mysql 5.6,我正在设计我的数据库结构 有许多列是固定长度的,其中至少有一列是纯字母数字的 因此我想知道: 对于固定长度的列,通常什么是(或是)最有效的数据类型 固定长度字母数字列的最有效数据类型是(或是)什么 为什么? 使用VARCHAR,不用担心 这只是当您处理的数据太多,无法安装在单个驱动器上,或者即使是在单个服务器上,也无法安装满驱动器时才需要考虑的问题 管理数十亿行数据库的公司在这方面有问题,但只有当你变得这么大时,你才会这样做。使用VARCHAR,不用担心 这只是当您处理的数据太多,无法安装在单个
使用
VARCHAR
,不用担心
这只是当您处理的数据太多,无法安装在单个驱动器上,或者即使是在单个服务器上,也无法安装满驱动器时才需要考虑的问题
管理数十亿行数据库的公司在这方面有问题,但只有当你变得这么大时,你才会这样做。使用
VARCHAR
,不用担心
这只是当您处理的数据太多,无法安装在单个驱动器上,或者即使是在单个服务器上,也无法安装满驱动器时才需要考虑的问题
管理数十亿行数据库的公司在这方面有问题,但只有当你变得这么大时才会有问题。简短回答:正如塔德曼所说:“使用VARCHAR,不要担心它” 长答覆: 立柱占用的空间是影响空间和速度的主要因素 真正固定长度的字符串可以声明为
CHAR(..)
。通常,它们只由ascii字符组成,因此“正确”的方法是,例如
country_code CHAR(2) CHARACTER SET ascii
uuid CHAR(36) CHARACTER SET ascii
固定长度的VARCHAR
与CHAR
之间的区别是实际字符串前面的1字节或2字节长度字段。除非你有几十亿行,否则这“没什么大不了的”
处理速度差异不显著,但CHAR
和ascii
win
如果您有所有的数字字符串,您可能希望使用INT
4字节或BIGINT
8字节或DECIMAL(30)
14字节等,而不是使用CHAR
或VARCHAR
,后者每位数有1个字节。数字字段都是固定长度的。但是,要小心。美国电话号码是固定长度的,但国际电话号码各不相同
你的意思是除了“字母数字”之外还有别的东西。如果您指的是BINARY
/VARBINARY
/BLOB
,那么规则基本相同
例如,uuid可以通过适当的转换从CHAR(36)
(36字节)缩小到BINARY(16)
(16字节)。后者在速度和空间方面更好,但会增加代码的复杂性。(不管怎样,UUID对于大型表来说非常糟糕;这是另一个主题。)
使用整数,始终考虑<代码> Bigint < /> V>代码> int <代码> VS <代码> Mudiuth VS >代码> SimultI/<代码> VS >代码> TINYINT,并且通常钉在<代码>未签名< /COD>。(分别占用8/4/3/2/1字节)在最初创建表时执行此操作;稍后做
修改是很麻烦的。简短回答:正如塔德曼所说:“使用VARCHAR,不要担心它”
长答覆:
立柱占用的空间是影响空间和速度的主要因素
真正固定长度的字符串可以声明为CHAR(..)
。通常,它们只由ascii字符组成,因此“正确”的方法是,例如
country_code CHAR(2) CHARACTER SET ascii
uuid CHAR(36) CHARACTER SET ascii
固定长度的VARCHAR
与CHAR
之间的区别是实际字符串前面的1字节或2字节长度字段。除非你有几十亿行,否则这“没什么大不了的”
处理速度差异不显著,但CHAR
和ascii
win
如果您有所有的数字字符串,您可能希望使用INT
4字节或BIGINT
8字节或DECIMAL(30)
14字节等,而不是使用CHAR
或VARCHAR
,后者每位数有1个字节。数字字段都是固定长度的。但是,要小心。美国电话号码是固定长度的,但国际电话号码各不相同
你的意思是除了“字母数字”之外还有别的东西。如果您指的是BINARY
/VARBINARY
/BLOB
,那么规则基本相同
例如,uuid可以通过适当的转换从CHAR(36)
(36字节)缩小到BINARY(16)
(16字节)。后者在速度和空间方面更好,但会增加代码的复杂性。(不管怎样,UUID对于大型表来说非常糟糕;这是另一个主题。)
使用整数,始终考虑<代码> Bigint < /> V>代码> int <代码> VS <代码> Mudiuth VS >代码> SimultI/<代码> VS >代码> TINYINT,并且通常钉在<代码>未签名< /COD>。(分别占用8/4/3/2/1字节)在最初创建表时执行此操作;以后做
修改会很麻烦。包括一些关于固定长度的字符的信息,我会将其标记为答案即使一行有27列,您仍然保持相同的位置?通过提出更优化的模式或使用类似JSON
type column而不是某个过宽的行,但无论如何,MySQL通常都不关心或不受影响。如果您对这样的性能有任何疑问,请编写一个脚本,通过插入N百万行来测试您的系统,看看它是如何运行的。您的提供程序的性能特征是完全独特的。是否存在JSON
数据类型?!谢谢你的提示!包含一些关于固定长度的char
的信息,我会将其标记为答案即使一行有27列,您仍然保持相同的位置?通过提出一个更优化的模式或使用类似JSON
类型的列,而不是一些过度使用的列,您将获得更多的性能提升广泛的行,但在任何情况下MySQL通常不关心或萨满