我有一个像这样的用户表:
如果我将其更改为此,技术上会更快:
我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数也是相同的。
答案 0 :(得分:5)
我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数也是相同的。
您是正确的 - 指定的位数不会更改MEDIUMINT列用于保存值的字节数。实际上,没有速度表现。
参考:
答案 1 :(得分:3)
MEDIUMINT之后的参数对其存储或其支持的值范围没有影响。这只是显示宽度的提示。大多数情况下,只有在使用ZEROFILL选项时才有意义。
CREATE TABLE foo (num MEDIUMINT(7) ZEROFILL);
INSERT INTO foo VALUES (1234);
SELECT num FROM foo;
0001234
MEDIUMINT总是三个字节。
答案 2 :(得分:1)
不,这不会更快。 MEDIUMINT之后的数字只是显示宽度。它仅影响查询结果在某些上下文中的显示方式。
答案 3 :(得分:0)
这只是一个显示宽度。如果使用MEDIUMINT(5),它不会使用小资源而不仅仅使用MEDIUMINT。谢谢你的提问。我有同样的问题。
参考: 12.2.5 Numeric Type Attributes
显示宽度不会限制可以的值范围 存储在列中。它也不会阻止比列宽的值 正确显示显示宽度。例如,一列 指定为SMALLINT(3)的通常SMALLINT范围为-32768到 32767,超出三位数允许范围的值 使用三位数以上完整显示。