我有结构化的这样一个用户表:数值类型和行大小在MySQL
- ID MEDIUMINT(7),
- 用户名VARCHAR(15)
难道技术上更快如果我把它改成这个:
- ID MEDIUMINT(5),
- 用户名VARCHAR(15)
我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数是相同的。
我有结构化的这样一个用户表:数值类型和行大小在MySQL
难道技术上更快如果我把它改成这个:
我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数是相同的。
我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数是相同的。
你是正确的 - 指定的位数不不变化,一个MEDIUMINT列将用来保存值的字节数。实际上,没有速度表现。
参考:
不,那将是没有更快。 MEDIUMINT后的数字就是显示宽度。它仅影响查询结果在某些情况下显示的方式。
MEDIUMINT之后的参数对其存储或其支持的值的范围没有影响。这只是显示宽度的提示。大多数情况下,只有当您使用ZEROFILL选项时才有用。
CREATE TABLE foo (num MEDIUMINT(7) ZEROFILL);
INSERT INTO foo VALUES (1234);
SELECT num FROM foo;
00
MEDIUMINT始终是3个字节。
这只是一个显示宽度。如果使用MEDIUMINT(5),它不会使用小资源,而只是使用MEDIUMINT。谢谢你的问题。我有同样的问题。
参考: 12.2.5 Numeric Type Attributes
显示宽度不限制值,可以是 存储在列的范围内。它也不会阻止比显示宽度的列 正确显示更宽的值。例如,指定为SMALLINT(3)的列 的常用SMALLINT范围为-32768至 32767,且三位数所允许的范围之外的值为 ,使用三位以上的数字完整显示。