我已经读过,如果表键是整数而不是char(36)UUID,那么mysql可以更好地处理索引和搜索。
是否值得转换为int(10)?
注意:我们只使用1台服务器,目前必须同时计划使用多个数据库,因此消除了使用UUID的一个重要原因。如果有所作为,我们的表也是InnoDB。
提前致谢。
答案 0 :(得分:2)
通常RDBMS可以比其他数据类型更有效地处理Integer键。原因是它如何构建列的索引,所以是的:只要你不需要字符串(或其他类型)键,你应该总是使用整数。
然而:CHAR(36)和INT(10)远离相等,因为INT(10) 小于CHAR(36)。我不知道,如果你需要这么多不同的钥匙,但你应该牢记这一点。
更新,以完成最后一段:
INT(10)
是32位,CHAR(36)
是36 - ^ Byte ^(= 288-Bit)。这不仅意味着,INT
消耗的空间更少,也意味着CHAR(36)
的密钥大约是其中的4倍。
答案 1 :(得分:1)
UUID是一个已编入索引的行,但是众所周知,字符键比数字键慢,因为索引大小。
但是如果你需要一个UUID或角色加入/索引,你必须考虑到这一点:
我分享此信息并在生产环境中对其进行了测试,可以在http://forums.mysql.com/read.php?24,263462,263462
中找到答案 2 :(得分:1)
InnoDB带来了巨大的变化。 如果在表上定义PRIMARY KEY,InnoDB会将其用作聚簇索引。
在巨大的innodb表上进行DML操作非常昂贵。如果您有许多连接,请使用整数。如果你有很多dml使用int。如果你有比dml更多的选择使用自然键,无论是int还是char