CHAR()或VARCHAR()作为ISAM MySQL表中的主键?

时间:2008-10-02 23:12:07

标签: mysql

我需要一个在MySQL中具有用户名和密码字段的简单表。由于用户名必须是唯一的,因此将它们作为主键是有意义的。

使用CHAR()VARCHAR()作为主键是否更好?

4 个答案:

答案 0 :(得分:9)

也可以只使用用户ID索引,对于连接与char / varchar的速度要快得多。如果您不得不扩展模式的功能,现在添加它所需的两秒钟可以为您节省大量时间。

要考虑的一些陷阱:

  • 说我们将来会添加一些表格,如果有人想要更改用户名怎么办?
  • 说应用程序比我们想象的更成功,我们必须看看优化,你真的想重做你的架构,以减少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应该证明它总体上更小。