限制行的大小是否有利于MySQL表大小?

问题描述:

我知道限制行的大小会将大小保持在设定的最大值,但是,如果我将所有行限制到它们将需要的最大值,是否会提高行的性能(即占用较少的空间)限制行的大小是否有利于MySQL表大小?

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

+0

这将有利于你的表现;不是桌子的大小。关于我的头脑,如果您将某些数据类型设置为最大值,可能会以不同的方式对待它们。 – Kermit 2013-02-27 04:24:41

+0

优化性能的技巧之一是创建表行时,它自己使用varchar而不是char,只要可能,而不是int等,使用tiny int将始终帮助优化查询的性能。优化是双刃剑,你需要在提前分析需求。 – 2013-02-27 04:30:18

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

例如,TINYINTSMALLINTMEDIUMINTINT,并BIGINT数据类型需要1个字节,分别为2个字节,3个字节,4个字节,8个字节。如果你只能存储高达10000的整数,那么SMALLINT将是最好的选择,因为它可以存储高达65,535(未签名)的值,并有足够的额外空间,并且需要INT的一半大小。

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

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

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

+0

由于G-金块,这是一个伟大的回答,非常有帮助 – Austio 2013-03-01 13:14:11

我不知道你的问题的目的是什么,但是如果你想最大限度地减少数据库使用的存储空间,你可以使用内置压缩,当你使用InnoDB存储引擎时它是有效的。

的更多信息:​​

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

+0

每个人都有上述很好的答案。然而这是多为通用问题“做投资时间限制这些领域带来的性能提升”看起来这是一个肯定的。 – Austio 2013-03-01 13:12:14

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

我以另一种方式走入其中的一个不错的方法是使用NVARCHAR而不是VARCHAR,如果VARCHAR要用于长字符串,但尚未足够长以适合需要大量空间的TEXT。