简短回答:(4)
对于INT
没有任何意义。
过长...回答:
列大小影响行的大小,这会影响表的大小,这会影响查询的速度。但是...
如果表格“小”,性能差异很小。
如果表大于可以在RAM中缓存的大小,那么差别可能会很大 - 因为您可能会受I/O限制。在某些情况下,这是一个十倍的放缓。
要收缩一个INT
,其是4个字节总是,切换到TINYINT UNSIGNED
(1字节,范围:0..255),SMALLINT UNSIGNED
(2个字节,0..65K),或MEDIUMINT UNSIGNED
(3个字节,0..16M)。
假设grade
为0..100,则TINYINT
(有符号或无符号)是最优的。
同时,您可以更改您的更改id
。
的唯一目的的INT(4)
是结合ZEROFILL
,要显示12 0012
。这是非常罕见的。
请勿使用CHAR
,除非字符串真的是固定长度字符串。然后它可能应该明确声明CHARACTER SET ascii
,因为它是十六进制,全部数字或两个字母的country_code(etc)。无论如何,utf8是矫枉过正。
假设您使用的是InnoDB,“辅助”INDEX(grade)
将隐式包含PRIMARY KEY(id)
。所以每个索引条目的大小是grade
的大小再加上大小id
加上一堆开销。假设正常成绩,并且从未超过65,000名学生,则可以使用3个字节而不是原来的8个字节。但该表很小,因此您不太可能受到I/O限制。因此,对于8而不是3而言,开销很小。
“int(4)”将完全不做任何事情,除非将完全可用的“int”字段变为不可用的信息段。数百万行不是很大,而是在小范围内。数据库的性能将取决于您的I/O子系统和CPU的速度,而不是您是否在这里或那里削减一个或两个字节。数据库旨在保存数据并利用它,通过降低其字段的有用性来设计数据库的性能并非正确使用该工具。你在错误的地方进行优化,特别是如果你打算为你的数据库使用一台服务器。 –