Sql 选择主键
我想创建一个“用户”表,其中包括一个“电子邮件地址”和/或“用户名”Sql 选择主键,sql,Sql,我想创建一个“用户”表,其中包括一个“电子邮件地址”和/或“用户名”unique字段,我是否还应该添加一个“id”int usigned auto_increment作为主键 我问这个问题是因为我看到一些教科书上的例子,在这样一个表中使用“id”字段和另一个唯一的字段。是的,这是最佳实践 您将在其他表中将其用作外键 您希望密钥保持唯一(您可能希望更改用户名) 如果希望索引键,则对于数值类型,索引将比varchar小得多 是的,这是最佳实践 您将在其他表中将其用作外键 您希望密钥保持唯一(您可能希
unique
字段,我是否还应该添加一个“id”int usigned auto_increment
作为主键
我问这个问题是因为我看到一些教科书上的例子,在这样一个表中使用“id”字段和另一个唯一的字段。是的,这是最佳实践
您将在其他表中将其用作外键
您希望密钥保持唯一(您可能希望更改用户名)
如果希望索引键,则对于数值类型,索引将比varchar小得多
是的,这是最佳实践
您将在其他表中将其用作外键
您希望密钥保持唯一(您可能希望更改用户名)
如果希望索引键,则对于数值类型,索引将比varchar小得多
您应该使用userId
列,因为使用VARCHAR
列数据类型为表编制索引的性能较低
使用INT
有助于提高性能。它们占用的空间更少,更重要的是,它们的比较速度更快
INT
比较可以在一条CPU指令中执行。对于VARCHAR
s或CHAR
s,必须依次比较每个字符。这使得每个PK查找都更快。如果您有联接表,则每个联接选择都将根据PK进行查找。您应该使用userId
列,因为使用VARCHAR
列数据类型为表编制索引的性能较差
使用INT
有助于提高性能。它们占用的空间更少,更重要的是,它们的比较速度更快
INT
比较可以在一条CPU指令中执行。对于VARCHAR
s或CHAR
s,必须依次比较每个字符。这使得每个PK查找都更快。如果您有联接表,则每个联接选择都将查找PK。您不需要,但我总是这样做。根据您的应用程序,您可能不希望对电子邮件有唯一约束。您不需要,但我总是这样做。根据您的应用程序,您可能不希望对电子邮件有唯一约束。为什么我不能使用“用户名”字段作为其他表中的外键?@csstd字符串搜索和索引速度比整数慢。为什么我不能在其他表中使用“用户名”字段作为外键?@csstd字符串搜索和索引速度比整数慢。