我需要一个在MySQL中具有用户名和密码字段的简单表.由于用户名必须是唯一的,因此将它们作为主键是有意义的.
使用CHAR()
或VARCHAR()
作为主键更好吗?
也可以只使用用户ID索引,加入vs char/varchar要快得多.如果你意外地必须扩展模式的功能,那么现在添加它所花费的两秒钟可以节省你很多时间.
要思考的一些陷阱:
假设我们在将来添加几个表,如果有人想要更改用户名怎么办?
说我们认为该应用程序更成功,我们必须考虑优化,您是否真的想在此时重做您的架构以减少varchar指数的开销?
我会努力不使用CHAR()或VARCHAR()作为PK,而是使用带有auto_increment的int.这允许您在子表中使用该user_id(如果需要),并且对PK的查询应该更快.如果你必须使用CHAR()或VARCHAR(),我会使用CHAR(),因为它是一个固定的宽度.
我不是100%确定MySQL如何处理VARCHAR(),但是大多数数据库引擎必须在引擎盖下做一些魔术来帮助引擎知道VARCHAR()字段的结束位置以及下一个字段开始的位置,CHAR( )使它直接前进并使发动机不必多想.