我需要一个在MySQL中具有用户名和密码字段的简单表。由于用户名必须是唯一的,因此将它们作为主键是有意义的。
使用CHAR()
或VARCHAR()
作为主键是否更好?
答案 0 :(得分:9)
也可以只使用用户ID索引,对于连接与char / varchar的速度要快得多。如果您不得不扩展模式的功能,现在添加它所需的两秒钟可以为您节省大量时间。
要考虑的一些陷阱:
答案 1 :(得分:5)
我会努力不使用CHAR()或VARCHAR()作为PK,而是使用带有auto_increment的int。这允许您在子表中使用该user_id(如果需要),并且对PK的查询应该更快。如果你必须使用CHAR()或VARCHAR(),我会使用CHAR(),因为它是一个固定的宽度。
我不是百分之百确定MySQL如何处理VARCHAR(),但大多数数据库引擎必须在引擎盖下做一些魔术,以帮助引擎知道VARCHAR()字段的结束位置以及下一个字段开始的位置,一个CHAR()使它直接前进并使引擎不必考虑太多。
答案 2 :(得分:1)
[我会努力不使用CHAR()或VARCHAR()作为PK但是使用带有auto_increment的int。] 1
设置用户名的唯一约束,但使用int字段作为PK
答案 3 :(得分:0)
我没有看到CHAR在我工作的任何MySQL数据库中使用得太多。我会选择VARCHAR
例如,对于CHAR(30),整个30个字符存储在表中,这意味着即使您的用户名只有10个字符,每个条目也会占用相同的空间。
使用VARCHAR(30)它只会使用足够的空间来存储您输入的字符串。
在一张小桌子上它不会有太大的区别,但是在一张较大的桌子上,VARCHAR应该证明它总体上更小。