减小varchar的大小并不能最小化磁盘空间吗?MySQL



我正在优化一个数据库,我注意到我的varchar(255(类型列的大小非常大,这会产生磁盘空间,其中我的值不会超过30个字符。

ALTER TABLE tablename MODIFY COLUMN columnname VARCHAR(30);

我更改了列的大小,但以mb为单位的总数没有减少(以前是35.mb,现在保持不变(,我该怎么办?

我如何减少存储空间,或者这种更改将仅用于将来的插入?

SELECT table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) size_mb 
FROM information_schema.TABLES 
WHERE table_schema = "db"
ORDER BY size_mb desc;

否,更改varchar列的声明长度并不会真正改变所需的存储量。

varchar值的长度描述为:

与CHAR不同,VARCHAR值存储为1字节或2字节长度的前缀加数据。长度前缀表示值中的字节数。如果值要求不超过255个字节,则列使用一个长度字节;如果值可能要求超过255个字符,则使用两个长度字节。

换句话说,更改varchar()值的声明长度只能更改数据的大小,您将值从255上的更改为2255下的。你没有那样做。

如果值被截断,将节省空间。然而,MySQL确实允许这样做;它会返回一个错误(请参阅此处的示例(。

你将不得不寻找其他地方来节省空间。注意,35Mb对于数据库表来说并不是特别大。

您的更改实际上可能会加速一些查询。

在复杂的SELECT中,可能需要构造一个临时表。这个临时表是可以保存在RAM中还是需要在磁盘上实例化取决于几个因素。其中一个因素是每个CCD_ 3的最大大小。

另外请注意,您的255(现在是30(是字符,而不是字节。需要2字节前缀取决于字节。因此,如果使用utf8,255会强制使用2字节前缀,但30不会。

最新更新