gpt4 book ai didi

mysql - 如果同一张表中有 VARCHAR,使用 CHAR 有什么意义吗?

转载 作者:可可西里 更新时间:2023-11-01 07:08:30 26 4
gpt4 key购买 nike

我刚刚阅读了 this question 的接受答案,这给我留下了这个问题。

引用该回答:

“但是既然你用 MySQL 标记了这个问题,我会提到一个 MySQL 特定的提示:当你的查询隐式生成一个临时表时,例如在排序或 GROUP BY 时, VARCHAR 字段转换为 CHAR 以获得使用固定宽度行的优势。如果您对数据使用大量 VARCHAR(255) 字段不需要那么长,这会使临时表变得非常大。”

据我了解,CHAR 的优点是您可以获得固定宽度的行,所以同一个表中的 VARCHAR 不会搞砸吗?当您在同一个表中有一个 VARCHAR 时,使用 CHAR 有什么好处吗?


这是一个例子:

带有 CHAR 的表格:

CREATE TABLE address (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
street VARCHAR(100) NOT NULL,
postcode CHAR(8) NOT NULL,
PRIMARY KEY (id)
);

没有 CHAR 的表格:

CREATE TABLE address (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
street VARCHAR(100) NOT NULL,
postcode VARCHAR(8) NOT NULL,
PRIMARY KEY (id)
);

具有 CHAR 的表是否会比不具有 CHAR 的表执行得更好,如果是,在什么情况下?

最佳答案

VARCHAR”基本上为字段设置了最大长度并且只存储输入到其中的数据,从而节省了空间。 “CHAR”类型具有固定长度,因此如果您设置“CHAR(100)”,无论内容是什么,都将使用 100 个字符的空间。

您获得速度优势的唯一情况是您的记录中没有可变长度字段(“VARCHAR”、“TEXT”等)。 您可能会注意到 一旦添加了可变长度字段类型,内部所有“CHAR”字段都会更改为“VARCHAR”,通过MySQL。

此外,“CHAR”从空间存储的角度来看效率较低,但搜索和添加效率更高。它更快,因为数据库只需要读取一个偏移值来获取记录,而不是读取部分直到找到记录的末尾。固定长度的记录将减少碎片,因为删除的记录空间可以重新用于新记录。

希望对您有所帮助。

关于mysql - 如果同一张表中有 VARCHAR,使用 CHAR 有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com