2010-05-22 45 views
3

我有几个表中有一些相当标准的数据。有人可以通过告诉我这些数据的最佳列类型来帮助我优化它们。他们旁边的东西就是我目前的东西。这个数据最有效的MySQL列类型是什么?

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
Number (either 0 or 1) --> TINYINT(1) Unsigned 

这应该是一个布尔值。

+0

我搜索谷歌的MySQL布尔和想出了 http://stackoverflow.com/questions/289727/which-mysql-datatype-to-use-for-storing-boolean-values-from-to-php 自从使用布尔型数据类型还是有其他优点吗? – Derek 2010-05-22 18:50:07

1

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

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

对于整数类型,数字与存储的字节数没有任何关系。这是显示宽度,这是别的。看到manual

另一部分是由MySQL的选择指定的整数数据类型的显示宽度括号中的类型base关键字以下支持(例如,INT(4))。这个可选的显示宽度可以被应用程序用来显示宽度小于为列指定的宽度的整数值,方法是用空格填充它们。 (也就是说,此宽度出现在结果集返回的元数据中,是否使用取决于应用程序。)

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

0

你已经很明智了。

请注意,您无法使用列类型优化任何内容。用你做的索引。

+0

我需要索引中的速成课程,截至目前,我只是猜测并将ID作为主要唯一,希望没有任何分歧。 – Derek 2010-05-22 19:07:11

0

取决于您对“高效”的定义。对于速度而言,CHAR可以比VARCHAR更快(因为每行的结束长度相同,因此查找给定的记录很容易)。但是你所有的领域都必须有固定的长度,否则就不用担心。

+0

我认为现代数据库使用索引来查找特定记录。所以,队列并不重要。 – 2010-05-22 18:59:09

+0

现代数据库使用索引查找特定记录(即:说“x = 3的记录是记录#R”,然后是另一个(内置的)索引以查看“记录R位于表数据中的位置P文件“,如果所有记录大小相同,则最后的查找可以完全跳过。 – cHao 2010-05-22 19:19:32