BigInt或varchar(40)和自动增加id或没有id?SQL


BigInt or varchar(40) and autoincrement id or no id? SQL

我的公司打算为一个网络论坛做一个Follow系统。这个论坛有100多万成员,你可以关注其他成员来查看这个成员在论坛上的帖子。

首先我做了一个这样的表:

CREATE TABLE IF NOT EXISTS `following` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user` varchar(40) NOT NULL,
  `following` varchar(80) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;

我的办公室朋友告诉我,我应该使用USER ID而不是user(关注者)和following(另一个)行的用户名。他是对的吗?

问题1:这样使用BigInt unsigned而不是Varchar和使用用户ID而不是用户名更好吗?

问题2:他还告诉我,我应该删除id auto_increment,因为我不使用它(我插入用户和删除使用where user='$user'和following='$following')。他是对的吗?还是auto_increment很重要?

谢谢朋友!

你觉得呢?比较8字节键(BIGINT)还是变长40字节键(VARCHAR(40))更有效?显然,BIGINT键将更有效。是的,为了DBMS的效率,您应该使用BIGINT甚至INT值作为用户的唯一标识符。INT就足够了。如果你获得了超过2 × 10**9的用户,你将面临Facebook规模的问题和预算。在那之前,让你的项目工作起来。YAGNI .

你描述的这个表是用来实现用户和其他用户之间直接的多对多关系吗?一个追随者可以多次关注一个用户吗?如果不是,就删除这个表中的代理主键(自动递增的ID)。相反,让您的主键是user_id和following_id列的组合。

如果这是我的项目,我会让(user_id, follower_id)为主键,我也会在follower_id上创建一个索引。(如果MyISAM是访问方法,第二个索引应该在(follower_id, user_id)上。)除了主键之外,不需要另一个索引,这完全是多余的。