3

我有几个表,每个表都有一些非常标准的数据。有人可以通过告诉我此数据的最佳列类型来帮助我优化它们吗?他们旁边的就是我目前拥有的。

Number (max length 7) --> MEDIUMINT(8) Unsigned
Text (max length 30) --> VARCHAR(30)
Text (max length 200) --> VARCHAR(200)
Email Address (max length 200) --> VARCHAR(200)
Number (max length 4) --> SMALLINT(5) Unsigned
Number (either 0 or 1) --> TINYINT(1) Unsigned
Text (max length 500) --> TEXT

有什么建议么?我只是在猜测,所以我知道其中一些是错误的......

4

4 回答 4

2

抱歉,这不是您问题的直接答案,但我认为这需要指出。我想你可能误解了列类型后面括号中整数的用途。

对于VARCHAR类型,您可能已经知道,它限制了最大长度。但是,它不会影响用于存储特定字符串的字节数。长度为 5 的字符串将需要相同数量的字节存储,无论它存储在 aVARCHAR(100)还是 aVARCHAR(200)中。

对于整数类型,该数字与存储的字节数无关。它是显示宽度,这是另一回事。请参阅手册

MySQL 支持另一个扩展,用于可选地在类型的基本关键字后面的括号中指定整数数据类型的显示宽度(例如,INT(4))。应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。(也就是说,这个宽度存在于与结果集一起返回的元数据中。是否使用它取决于应用程序。)

显示宽度不限制可存储在列中的值的范围,也不限制宽度超过为列指定的值显示的位数。

于 2010-05-22T18:53:55.550 回答
0

取决于您对“高效”的定义。就速度而言,CHAR 可以比 VARCHAR 更快(因为每一行的长度相同,因此查找给定记录变得简单)。但是你所有的字段都必须有固定的长度,或者不要打扰。

于 2010-05-22T18:56:42.330 回答
0
Number (either 0 or 1) --> TINYINT(1) Unsigned

那应该是一个布尔值。

于 2010-05-22T18:46:52.553 回答
0

你已经很明智了。

请注意,您无法使用列类型优化任何内容。有了索引就可以了。

于 2010-05-22T18:54:49.710 回答