2010-07-08 34 views
1

我有结构化的这样一个用户表:数值类型和行大小在MySQL

  • ID MEDIUMINT(7),
  • 用户名VARCHAR(15)

难道技术上更快如果我把它改成这个:

  • ID MEDIUMINT(5),
  • 用户名VARCHAR(15)

我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数是相同的。

回答

5

我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数是相同的。

你是正确的 - 指定的位数不变化,一个MEDIUMINT列将用来保存值的字节数。实际上,没有速度表现。

参考:

1

不,那将是没有更快。 MEDIUMINT后的数字就是显示宽度。它仅影响查询结果在某些情况下显示的方式。

3

MEDIUMINT之后的参数对其存储或其支持的值的范围没有影响。这只是显示宽度的提示。大多数情况下,只有当您使用ZEROFILL选项时才有用。

CREATE TABLE foo (num MEDIUMINT(7) ZEROFILL); 
INSERT INTO foo VALUES (1234); 
SELECT num FROM foo; 

00

MEDIUMINT始终是3个字节。

0

这只是一个显示宽度。如果使用MEDIUMINT(5),它不会使用小资源,而只是使用MEDIUMINT。谢谢你的问题。我有同样的问题。

参考: 12.2.5 Numeric Type Attributes

显示宽度不限制值,可以是 存储在列的范围内。它也不会阻止比显示宽度的列 正确显示更宽的值。例如,指定为SMALLINT(3)的列 的常用SMALLINT范围为-32768至 32767,且三位数所允许的范围之外的值为 ,使用三位以上的数字完整显示。