0

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

现在,将其更改为 SMALLINT 会在性能或存储方面带来任何好处......?有人请解释一下如何。

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

我在每个中插入了 513 行。当我看到他们每个人的 show create table 时,我没有看到数据大小或索引大小有任何变化。它们是 MISAM 表。那么选择 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
4

2 回答 2

3

数据类型和“长度”之间有一个重要的区别。

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

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

这是手册中的有用图表:

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
于 2012-04-18T13:40:01.590 回答
0

更具体的字段大小的一个原因仅仅是因为它减少了错误的数量。你越是限制某人的特定自由,信息就越准确。这就是为什么在许多网站上,当您注册时,它会显示您居住的国家或州的下拉列表。这减少了用户拥有的选项数量,从而保持了安全的做法。如果一个网站允许你输入你的状态,想想你从不同用户那里得到的每一个例子。例如,佛罗里达州将是:

  • 佛罗里达
  • 佛罗里达州
  • 佛罗里达州
  • 福里达

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

于 2012-04-18T13:34:17.957 回答