Php 哪一个最适合用作db中的主键?varchar还是number。

Php 哪一个最适合用作db中的主键?varchar还是number。,php,mysql,primary-key,Php,Mysql,Primary Key,在我的项目中,我使用的是mysql数据库。因为我已经创建了包含字段(电子邮件、用户名等)的表 在这个表中,我将电子邮件作为主键。 这个方法是使用主键的好方法,还是我必须创建一个数字作为主键,比如user_id(自动递增)。 哪一种方法是正确的,并且与同一数据库中的其他表连接时具有良好的性能 Varchar比较比int比较慢。但是,如果只是使用电子邮件地址从数据库检索用户,这并不重要。如果您有具有多个联接的复杂查询,这一点很重要 如果在多个表中存储有关用户的信息,则用户表的外键将是电子邮件地址。这

在我的项目中,我使用的是mysql数据库。因为我已经创建了包含字段(电子邮件、用户名等)的表

在这个表中,我将电子邮件作为主键。 这个方法是使用主键的好方法,还是我必须创建一个数字作为主键,比如user_id(自动递增)。
哪一种方法是正确的,并且与同一数据库中的其他表连接时具有良好的性能

Varchar比较比int比较慢。但是,如果只是使用电子邮件地址从数据库检索用户,这并不重要。如果您有具有多个联接的复杂查询,这一点很重要


如果在多个表中存储有关用户的信息,则用户表的外键将是电子邮件地址。这意味着您要多次存储电子邮件地址。

使用InnoDB引擎时,主键(PK)的大小非常重要

PK中字段的大小将影响any的大小,因为它将与索引的列一起存储。选择错误的数据类型将导致索引膨胀和磁盘使用率增加。这也意味着每个索引将使用更多的数据


如果您需要引用另一个表中的行,那么这将意味着进一步增加内存和磁盘使用率,因为您需要将PK存储在多个位置。电子邮件地址无疑是一个浪费空间的例子,如果用作PK,因为BIGINT将是8字节,而VARCHAR的大小要大得多

谢谢,在使用VARCHAR比较时是否有任何处理缓慢的问题。imo,像电子邮件这样的项目作为主标识符(主键)不是很好在实体的生命周期内标识实体。为什么?他们可以而且确实改变。它们可用于查找主键,主键通常是唯一的数字。如果需要保存更改的历史记录,这将非常有用。i、 e.您需要知道该实体的旧主键是什么。感谢Ryan Vincent,我接受您的观点,将电子邮件id保留为主键可能会带来一些风险。我还有一个疑问,varchar作为主键是否会产生任何性能或内存消耗问题?我已经从这篇文章中获得了一些观点,更好的是,你也可以给出一些分数,不管你知道什么,这对我很有用。