MySQL-生成像自动增量一样的唯一id
我们有一个这样的表来维护每个“文章”的“评论”。我们有数百万篇文章,每篇文章可能有多条评论 我们要求每个“文章”的“id”都是唯一的,但不一定在所有文章中都是唯一的 在当前的方法中,我们先插入,然后使用mysql\u insert\u id()来获取“id”,因此不需要额外的查询来获取生成的“id”MySQL-生成像自动增量一样的唯一id,mysql,sql,auto-increment,Mysql,Sql,Auto Increment,我们有一个这样的表来维护每个“文章”的“评论”。我们有数百万篇文章,每篇文章可能有多条评论 我们要求每个“文章”的“id”都是唯一的,但不一定在所有文章中都是唯一的 在当前的方法中,我们先插入,然后使用mysql\u insert\u id()来获取“id”,因此不需要额外的查询来获取生成的“id” CREATE TABLE `comments` ( id bigint unsigned NOT NULL AUTO_INCREMENT, article int unsigned i
CREATE TABLE `comments` (
id bigint unsigned NOT NULL AUTO_INCREMENT,
article int unsigned int default 0,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这种方法是可行的,但从某种意义上说,我们需要将bigint用于“id”,尽管我们不希望每篇文章的评论数超过几千条,这是一种过分的做法。我们可以手动维护id,但缺点是需要额外的查询来获取“id”,我们只需调用mysql\u insert\u id()。如果可以在文章范围内自动增加'id',这将很容易
关于更好的方法的任何建议,以便
- 在当前设计中,您可以显示信息,并具有类似
的链接李>url/viewcoment/commentId={commentId}
- 如果注释可通过
和articleId
识别,则所有URL都需要这两个IDcommentInternalId
id
的一种方法如下(基于1):
但使用自动增量显然更为复杂和昂贵
这种方法是有效的,但从我们需要这样做的意义上说,这是一种过度的杀伤力
对“id”使用bigint,即使我们不希望每篇文章都有评论
超过几千人
我认为这是不必要的。假设您希望在应用程序的某些部分中输出最近的注释:
- 在当前设计中,您可以显示信息,并具有类似
的链接李>url/viewcoment/commentId={commentId}
- 如果注释可通过
和articleId
识别,则所有URL都需要这两个IDcommentInternalId
id
的一种方法如下(基于1):
但使用自动递增显然更复杂、更昂贵。您可以为每篇文章实现一个序列来完成您需要的内容。您可以为每篇文章实现一个序列来完成您需要的内容。
(COUNT(1) FROM `comments` WHERE article = {article}) + 1