Kamalakannan J Asked: 2021-05-23 11:04:39 +0800 CST2021-05-23 11:04:39 +0800 CST 2021-05-23 11:04:39 +0800 CST 当 varchar 更高效时,为什么数据库具有 char 数据类型? 772 我了解占用固定长度的数据类型CHAR和占用空间的数据类型之间的基本区别是基于存储的内容。VARCHARCHARVARCHAR 但是,如果VARCHAR根据存储的内容动态处理空间管理如此有效,为什么数据库支持CHAR数据类型,所有CHAR(n)字段都可以是VARCHAR(n)字段,对吧? datatypes storage 2 个回答 Voted Best Answer J.D. 2021-05-23T12:35:09+08:002021-05-23T12:35:09+08:00 您应该阅读这篇文章SQL varchar data type deep dive,特别是使用 SQL varchar 的存储和性能注意事项部分: 由于字段长度固定,直接从列中提取数据而不进行任何数据操作,并且针对 varchar 的索引查找比 char 字段慢。CHAR 在性能方面优于 VARCHAR,但是,当数据没有固定长度时,它会占用不必要的内存空间。因此,在磁盘大小不是问题的情况下,建议使用 CHAR。 请注意,这特别说明了从 Microsoft SQL Server 角度来看的差异,YMMV 用于其他数据库系统,并且并非所有都支持CHAR和VARCHAR数据类型(例如,SQLite 既没有数据类型,也只支持它所谓的TEXT数据类型)。 从 MySQL 的角度来看,这里有一些很好的信息,由 RolandoMySQLDBA 提供 - DBA.StackExchange 回答What is the performance impact of using CHAR vs VARCHAR on a fixed-size field?: 由于 CHAR 字段由于字段宽度固定而需要较少的字符串操作,因此针对 CHAR 字段的索引查找平均比 VARCHAR 字段快 20%。 令人惊讶的是,在 PostgreSQL 领域,听起来似乎不存在相同的性能差异,因此数据类型之间的实际差异并不那么丰富。请参阅StackOverflow 对文本和 varchar 之间的差异(字符变化)的回答以及对 CHAR vs VARCHAR (Postgres)的索引性能的 DBA.StackExchange 回答: ...所有 4 种数据类型的插入和选择的性能相似。 CHAR 和 VARCHAR 在 Postgres(和 Oracle)中的实现完全相同。使用这些数据类型时速度没有差异。 user3703276 2021-05-23T22:32:14+08:002021-05-23T22:32:14+08:00 我想用一个简单的例子来解释你需要在数据库中存储性别 可能的值 F、M、O 使用 char 每个条目(8 位)需要 1 个字节 使用 varchar 每个条目需要 1 个字节和 2 个字节(比如说 24 位) 通过使用 char 你可以将数据库的大小减少到 33%
您应该阅读这篇文章SQL varchar data type deep dive,特别是使用 SQL varchar 的存储和性能注意事项部分:
请注意,这特别说明了从 Microsoft SQL Server 角度来看的差异,YMMV 用于其他数据库系统,并且并非所有都支持
CHAR
和VARCHAR
数据类型(例如,SQLite 既没有数据类型,也只支持它所谓的TEXT
数据类型)。从 MySQL 的角度来看,这里有一些很好的信息,由 RolandoMySQLDBA 提供 - DBA.StackExchange 回答What is the performance impact of using CHAR vs VARCHAR on a fixed-size field?:
令人惊讶的是,在 PostgreSQL 领域,听起来似乎不存在相同的性能差异,因此数据类型之间的实际差异并不那么丰富。请参阅StackOverflow 对文本和 varchar 之间的差异(字符变化)的回答以及对 CHAR vs VARCHAR (Postgres)的索引性能的 DBA.StackExchange 回答:
我想用一个简单的例子来解释你需要在数据库中存储性别 可能的值 F、M、O 使用 char 每个条目(8 位)需要 1 个字节 使用 varchar 每个条目需要 1 个字节和 2 个字节(比如说 24 位)
通过使用 char 你可以将数据库的大小减少到 33%