MySQL-生成像自动增量一样的唯一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

我们有一个这样的表来维护每个“文章”的“评论”。我们有数百万篇文章,每篇文章可能有多条评论

我们要求每个“文章”的“id”都是唯一的,但不一定在所有文章中都是唯一的

在当前的方法中,我们先插入,然后使用mysql\u insert\u id()来获取“id”,因此不需要额外的查询来获取生成的“id”

 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',这将很容易

关于更好的方法的任何建议,以便

  • 我们可以生成一个较小的“id”,它对于一篇文章来说是唯一的,但不一定在所有文章中都是唯一的
  • 没有要获取生成的“id”的其他查询
  • 谢谢

    这种方法是有效的,但从我们需要这样做的意义上说,这是一种过度的杀伤力 对“id”使用bigint,即使我们不希望每篇文章都有评论 超过几千人

    我认为这是不必要的。假设您希望在应用程序的某些部分中输出最近的注释:

    • 在当前设计中,您可以显示信息,并具有类似
      url/viewcoment/commentId={commentId}
      的链接
    • 如果注释可通过
      articleId
      commentInternalId
      识别,则所有URL都需要这两个ID
    生成
    id
    的一种方法如下(基于1):

    但使用自动增量显然更为复杂和昂贵

    这种方法是有效的,但从我们需要这样做的意义上说,这是一种过度的杀伤力 对“id”使用bigint,即使我们不希望每篇文章都有评论 超过几千人

    我认为这是不必要的。假设您希望在应用程序的某些部分中输出最近的注释:

    • 在当前设计中,您可以显示信息,并具有类似
      url/viewcoment/commentId={commentId}
      的链接
    • 如果注释可通过
      articleId
      commentInternalId
      识别,则所有URL都需要这两个ID
    生成
    id
    的一种方法如下(基于1):


    但使用自动递增显然更复杂、更昂贵。

    您可以为每篇文章实现一个序列来完成您需要的内容。您可以为每篇文章实现一个序列来完成您需要的内容。
    (COUNT(1) FROM `comments` WHERE article = {article}) + 1