我有几个表,每个表都有一些非常标准的数据。有人可以通过告诉我这些数据的最佳列类型来帮助我优化它们。他们身边的东西就是我现在所拥有的。
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
有什么建议吗?我只是在猜这个,所以我知道其中有些错了......
答案 0 :(得分:1)
很抱歉,这不是您问题的直接答案,但我认为这需要指出。我想你可能误解了列类型后括号中整数的用途。
对于VARCHAR
类型,您可能已经知道,它会限制最大长度。但是,它不会影响用于存储特定字符串的字节数。长度为5的字符串将需要相同数量的字节存储,无论它是存储在VARCHAR(100)
还是VARCHAR(200)
中。
对于整数类型,该数字与存储的字节数没有任何关系。这是显示宽度,这是其他的东西。请参阅manual:
MySQL支持另一个扩展,可选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度(例如,INT(4))。应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格填充它们。 (也就是说,此宽度存在于使用结果集返回的元数据中。是否使用它取决于应用程序。)
显示宽度不会限制可以存储在列中的值的范围,也不会限制宽度超过为列指定宽度的值显示的位数。
答案 1 :(得分:0)
Number (either 0 or 1) --> TINYINT(1) Unsigned
那应该是布尔值。
答案 2 :(得分:0)
你已经非常明智了。
请注意,您无法使用列类型优化任何内容。使用索引。
答案 3 :(得分:0)
取决于您对“高效”的定义。对于速度,CHAR可以比VARCHAR更快(因为每行的结尾长度相同,因此可以很容易地寻找给定的记录)。但是你所有的领域都必须有固定的长度,或者不要打扰。