Database design varchar(1)与char(1)之间的性能

Database design varchar(1)与char(1)之间的性能,database-design,data-modeling,Database Design,Data Modeling,varchar(1)和char(1)之间是否存在性能差异?哪种RDBMS以不同的方式处理这两种数据类型和大小?这并不重要,因为在这两种情况下都使用1字节 但长话短说,varchar是可变大小的&char是固定大小的。在大量情况下,这可能会改变存储空间并影响计算时间 在性能方面,如果数据是固定长度的,则使用char。如果您可以灵活地处理不同长度的数据,那么请使用varchar。就Oracle而言 CHAR(2)将始终使用两个字节/字符的存储。VARCHAR2(2)只能使用一个。因此,一般情况下使用

varchar(1)
char(1)
之间是否存在性能差异?哪种RDBMS以不同的方式处理这两种数据类型和大小?

这并不重要,因为在这两种情况下都使用1字节

但长话短说,varchar是可变大小的&char是固定大小的。在大量情况下,这可能会改变存储空间并影响计算时间


在性能方面,如果数据是固定长度的,则使用char。如果您可以灵活地处理不同长度的数据,那么请使用varchar。

就Oracle而言

CHAR(2)将始终使用两个字节/字符的存储。VARCHAR2(2)只能使用一个。因此,一般情况下使用VARCHAR2而不是CHAR

实际上,对于一个字符的列,您不应该看到性能方面的差异


因为CHAR没有任何好处,所以我总是使用VARCHAR2。

在大多数情况下,差异可以忽略不计。将面向性能的设计工作集中在真正有意义的地方,如表组成和索引设计

它有助于将设计工作分为两层:逻辑设计和物理设计。
大多数面向性能的工作都在第二阶段,即物理设计阶段


在逻辑设计中,灵活性胜过性能。在阅读MySQL对VARCHAR和CHAR的描述后,我的理解是,如果数据总是相同的长度,那么CHAR可能会为您保存一个字节的数据,因为VARCHAR需要存储一个与实际数据分开的字节,以便记录数据的长度。但是,如果您认为数据不是一个恒定长度,并且考虑到空间因素,那么使用VARCHAR是有意义的,因为CHAR将始终为声明长度的每一位使用一个字节,无论该空间中是否有任何内容

不过,最终可能不会有太大的区别,因为所涉及的数据量非常小

这里是我获得信息的地方:如果您遵循链接,请特别注意这个小图表,因为它给出了使用VARCHAR与CHAR处理数据的示例。

在MS SQL中
VARCHAR(1)
使用三个字节的存储,而
CHAR(1)
使用一个字节的存储

CHAR(1)
在处理和存储方面比
VARCHAR(1)
更高效

如果使用可变长度数据,
VARCHAR
上的盈亏平衡点将大于3个字符

如果使用固定长度,则
CHAR
的效率通常会提高两个字节

参考:

适用于Oracle

VARCHAR2(1)和CHAR(1)在所有方面都是相同的。没有 在这种情况下使用CHAR类型并避免任何 困惑,我“只是说不”,即使是对于CHAR(1)字段


参考资料:

varchar仍然必须为字符串长度至少存储一个字节,因此不能少于1个字节。灵活性几乎永远不会胜过性能!我保证用户希望性能优于灵活性,即使他们说他们希望灵活性。也许不是:**两种情况下都不是1字节!***-例如,MYSQL v5.0文档说,varchar(M)的varchar存储要求“如果列值需要0–255字节,则需要L+1字节”(其中L表示给定字符串值的实际字节长度)。因此,CHAR(1)使用1个字节,VARCHAR(1)使用2个字节。在这种情况下,此列的存储空间将增加100%。这可能是也可能不是一个大问题,取决于使用情况。值得指出的区别,虽然它是相关的。(请参阅)对于驾驶员而言并非如此。Oracle.NET驱动程序两者都不同。