当 varchar 效率更高时,为什么数据库具有 char 数据类型?

Kam*_*n J 3 datatypes storage sql-standard

据我所知的基本区别CHARVARCHAR数据类型,它CHAR占用的固定长度,而VARCHAR占用空间基于正被存储的内容。

但是如果VARCHAR根据存储的内容动态处理空间管理如此有效,为什么数据库支持CHAR数据类型,所有CHAR(n)字段都可以是VARCHAR(n)字段,对吧?

J.D*_*.D. 6

You should read this article SQL varchar data type deep dive, and specifically the Storage and performance considerations using SQL varchar section:

Because of the fixed field lengths, data is pulled straight from the column without doing any data manipulation and index lookups against varchar are slower than that of char fields. CHAR is better than VARCHAR performance wise, however, it takes unnecessary memory space when the data does not have a fixed-length. So in cases where disk size is not an issue, it is recommended to use CHAR.

请注意,这特别说明了 Microsoft SQL Server 角度的差异,其他数据库系统的 YMMV,并非所有数据类型都支持CHARVARCHAR数据类型(例如 SQLite 既没有数据类型,只支持它所谓的TEXT数据类型)。

这里有一些类似的好信息,从 MySQL 的角度来看,由 RolandoMySQLDBA 提供 - DBA.StackExchange对在固定大小的字段上使用 CHAR 与 VARCHAR 的性能影响是什么的回答

由于 CHAR 字段由于字段宽度固定而需要较少的字符串操作,因此针对 CHAR 字段的索引查找平均比 VARCHAR 字段快 20%。

令人惊讶的是,在 PostgreSQL 领域,听起来似乎不存在相同的性能差异,因此数据类型之间的实际差异并不那么丰富。请参阅此StackOverflow 对文本和 varchar 之间的差异(字符变化)的回答和此DBA.StackExchange对 CHAR 与 VARCHAR (Postgres) 的索引性能的回答

...所有 4 种数据类型的插入和选择的性能相似。

CHAR 和 VARCHAR 在 Postgres(和 Oracle)中的实现完全相同。使用这些数据类型时速度没有区别。


归档时间:

查看次数:

331 次

最近记录:

4 年,4 月 前