0

我知道限制行大小会将大小保持在设定的最大值,但是,如果我将所有行限制为他们将需要的最大值,是否会提高行的性能(即占用更少的空间)

或者mysql是否动态分配行所需的大小和最大行长度对其没有影响?

4

3 回答 3

1

MySQL 不会动态调整字段大小;可能需要的大小由您选择的数据类型决定。但是,您可以选择适当的数据类型来帮助优化数据库。

例如,TINYINTSMALLINTMEDIUMINTINTBIGINT数据类型分别需要 1 字节、2 字节、3 字节、4 字节和 8 字节。如果您只打算存储高达 10,000 的整数,SMALLINT那将是最佳选择,因为它可以存储高达 65,535(无符号)的值,并且有足够的额外空间,并且需要INT.

对于可变长度类型,如VARCHAR任何长度(包括 255),使用一个字节前缀来存储长度。更多使用 2 字节前缀。如果可能,将 s限制VARCHAR在最多 255 是最好的。例如,字符串在一个字段和一个字段foo中都需要 4 个字节。例如,如果字段的最大长度为 500,则需要 5 个字节。VARCHAR(3)VARCHAR(255)foo

如果可能使用短(有时甚至是长)文本 xolumns,CHAR如果字符串始终具有相同的长度或非常接近的长度,则该类型可能是有益的。此外,如果您使用的是 MyISAM 存储引擎并且所有列都是固定长度的,则可以使用FIXED行格式,这是有益的。

有关 MySQL 数据类型的更多信息,请参阅手册

于 2013-02-27T16:08:24.987 回答
0

我不知道你的问题的目的是什么,但是如果你想最小化数据库使用的存储空间,你可以使用内置压缩,这在你使用 InnoDB 存储引擎时可用。

更多信息:为表启用压缩 (dev.mysql.com)

我不知道它如何影响性能(速度),我从未使用过该功能,但我认为压缩可能会显着减慢您的数据库。但是,如果您在某些托管服务器上的磁盘空间有限 - 它可能对负载不重的应用程序很有用。

于 2013-02-27T17:52:21.390 回答
0

MySql 不会自动分配必要的大小,因此您不想自己定义它以使数据库的性能更好并保持在最小大小。

我进入另一种方式的一个很好的方法是使用 NVARCHAR 而不是 VARCHAR,如果 VARCHAR 用于长字符串,但长度不足以适合 TEXT,这需要大量空间。

于 2013-02-28T21:12:42.680 回答