Mysql:为什么我应该使用适当的数据大小并在定义表时选择最佳数据长度

时间:2012-04-18 13:29:23

标签: mysql

我有一个存储用户详细信息的表。我几乎没有10K的价值。 它的ID字段定义为bigint(20),它甚至可以容纳大数据范围。

现在,将其更改为SMALLINT将在性能或存储方面带来任何好处......?有些人可以解释一下它是怎么回事。

我创建了两个小桌子     一个ID为INT(10)
    另一个ID为INT(100)

我在每个中插入了513行。当我看到每个人的show create table时,我没有看到数据大小或索引大小的任何变化。他们是MYISAM表。那么选择SMALLINT比使用int(100)或INT(10)

更好

这是该信息

| id    | int(10) | NO   | PRI | NULL    | auto_increment |
| size  | int(10) | YES  |     | NULL    |                |
Data_length: 4617
Index_length: 8192


| id    | int(100) | NO   | PRI | NULL    | auto_increment |
| size  | int(10)  | YES  |     | NULL    |                |
Data_length: 4617
Index_length: 8192

2 个答案:

答案 0 :(得分:3)

数据类型与“长度”之间存在重要区别。

int(10)和int(100)实际上是相同的数据类型,因此它们都占用4个字节。 “10”和“100”只会影响数据的显示方式,而不会影响数据的存储方式。

选择数据类型是存储效率与存储更大范围值的灵活性之间的权衡。

以下是manual的有用图表:

Type    Storage     Minimum Value       Maximum Value
        (Bytes)     (Signed/Unsigned)   Signed/Unsigned)
TINYINT     1   -128    127
                0   255
SMALLINT    2   -32768  32767
                0   65535
MEDIUMINT   3   -8388608    8388607
                0   16777215
INT     4   -2147483648     2147483647
                0   4294967295
BIGINT  8   -9223372036854775808    9223372036854775807
                0   18446744073709551615

答案 1 :(得分:0)

在字段大小中更具体的一个原因仅仅是因为它减少了错误的数量。您对特定自由的限制越多,信息就越准确。这就是为什么在很多网站上注册的时候,它有下拉列表来显示你所在的国家或地区。这减少了用户拥有的选项数量,从而保持了安全的做法。如果网站允许您输入您的州,请考虑您从不同用户获得的每个示例。例如,佛罗里达州将是:

  • 佛罗里达
  • FL
  • FL
  • Folrida

如果你注意到,我在上一个例子中拼错了佛罗里达错误。现在想象一下尝试对来自佛罗里达州的用户运行查询,您会选择哪一个?您必须考虑用户可以输入的每个选项。限制他们的自由让你知道场内的内容是最好的方式。