我有一个存储用户详细信息的表。我几乎没有10K的价值。 它的ID字段定义为bigint(20),它甚至可以容纳大数据范围。
现在,将其更改为SMALLINT将在性能或存储方面带来任何好处......?有些人可以解释一下它是怎么回事。
我创建了两个小桌子 一个ID为INT(10)我在每个中插入了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
答案 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)
在字段大小中更具体的一个原因仅仅是因为它减少了错误的数量。您对特定自由的限制越多,信息就越准确。这就是为什么在很多网站上注册的时候,它有下拉列表来显示你所在的国家或地区。这减少了用户拥有的选项数量,从而保持了安全的做法。如果网站允许您输入您的州,请考虑您从不同用户获得的每个示例。例如,佛罗里达州将是:
如果你注意到,我在上一个例子中拼错了佛罗里达错误。现在想象一下尝试对来自佛罗里达州的用户运行查询,您会选择哪一个?您必须考虑用户可以输入的每个选项。限制他们的自由让你知道场内的内容是最好的方式。