我知道限制行大小会将大小保持在设置的最大值,但是,如果我将所有行限制为他们将需要的最大行数,那么是否会增加行的性能(即占用更少的空间)
或者mysql是否动态分配行所需的大小,最大行长度对它没有影响?
答案 0 :(得分:1)
MySQL不会动态调整字段大小;潜在的所需大小由您选择的数据类型决定。但是,您可以选择适当的数据类型来帮助优化数据库。
例如,TINYINT
,SMALLINT
,MEDIUMINT
,INT
和BIGINT
数据类型需要1个字节,2个字节,3个字节,4个字节和8个字节。如果你只想存储高达10,000的整数,SMALLINT
将是最好的选择,因为它可以存储高达65,535(无符号)的值,而且需要额外的空间,并且需要{{1的一半大小}}
对于像INT
这样的可变长度类型,任何长度(包括255)都使用一个字节前缀来存储长度。任何更多使用2字节前缀。如果可能,将VARCHAR
限制为最多255个是最好的。例如,字符串VARCHAR
在foo
字段和VARCHAR(3)
字段中都需要4个字节。例如,如果字段的最大长度为500,则VARCHAR(255)
将需要5个字节。
如果可能使用短文本(有时甚至是长文本)xolumns,如果字符串始终具有相同的长度或非常接近的长度,则foo
类型可能是有益的。此外,如果您使用的是MyISAM存储引擎并且所有列都是固定长度的,则可以使用CHAR
行格式,这是有益的。
有关MySQL数据类型的更多信息,请参见manual。
答案 1 :(得分:0)
我不知道你问题的目的是什么,但是如果你想最小化数据库使用的存储空间,你可以使用内置压缩,这在你使用InnoDB存储引擎时是可用的。
更多信息:Enabling Compression for a Table (dev.mysql.com)
我不知道它如何影响性能(速度),我从未使用过该功能,但我认为压缩可能会显着降低数据库速度。但是,如果某些托管服务器上的磁盘空间有限,则对于没有大量负载的应用程序可能会有用。
答案 2 :(得分:0)
MySql不会自动分配必要的大小,因此您不必自己定义它以使数据库的性能更好并将其保持在最小大小。
我走向另一种方式的一个不错的方法是使用NVARCHAR而不是VARCHAR,如果VARCHAR用于长字符串,但是不够长,不适合TEXT,这需要大量的空间。 / p>