我有一个简单的用户表,我想我将拥有的最大用户数为300,000。
目前我正在使用:
CREATE TABLE users
(
id INT UNSIGNED AUTOINCREMENT PRIMARY KEY,
....
当然我有很多其他用户(id)是FOREIGN KEY的表。
我读过,因为id不会使用INT的最大值,所以最好使用: MEDIUMINT,它将提供更好的性能。
是真的吗?
(我在Windows Server 2008上使用mysql)
答案 0 :(得分:10)
我会考虑在300K行上使用MEDIUMINT .. MEDIUMINT给你足够的空间,最多16M行(无符号)。
当您使用索引时,不仅仅是“较小的表大小”。差异可能很大 在一个27M行表...从INT更改为2列到MEDIUMINT节省了我1GB(索引+表数据)所以它从2.5GB变为1.5GB。
答案 1 :(得分:5)
这称为微优化,而不是问题 尽量只根据真实的经验而不是想象力来问(首先是你自己)表现问题。 性能分析总是有助于区分彼此。
至于“300k max” - 在现实生活中,数字往往会出乎意料地增长。为什么要为自己挖一个陷阱?
答案 2 :(得分:3)
不应该有性能差异,唯一的优势是表格尺寸略小。无论如何,对于300'000行,您不必关心。
答案 3 :(得分:0)
如果您关心速度微优化,请使用int
。
磁盘读取访问将读取一个字节块,因此读取4个字节将与读取3个字节相同。
但是由于3个字节的整数不是CPU的本机,mediumint
需要先转换才能使用(将memcpy转换为4/8字节的整数),这会造成开销,而4字节的整数是CPU的本机并且可以直接使用。