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字符串搜索和索引速度比整数慢。