2016-05-30 170 views
1

我們有一個這樣的表來維護每個'文章'的'註釋'。我們有數百萬篇文章,每篇文章可能有多個評論。MySQL - 生成自動增量的唯一標識

我們要求'id'對每個'文章'都是唯一的,但不一定在所有文章中都是唯一的。

在當前的方法中,我們插入然後使用mysql_insert_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,但缺點是它需要額外的查詢才能通過調用mysql_insert_id()來獲得'id'。如果可以在文章範圍內自動增加'id',這將很容易。

上一個更好的辦法任何建議,使

  1. 我們可以生成較小的「身份證」,這是一個獨特的文章,但在所有的文章不一定是唯一的。
  2. 沒有額外的查詢來獲取生成的「ID」

感謝

+0

您可以實現每篇文章的順序來完成您所需要的內容。 – wchiquito

回答

0

這種方法的作品,但它是在這個意義上矯枉過正,我們需要 使用BIGINT的「身份證」,即使我們不預計每篇文章 的評論將超過幾千。

我不認爲這是必要的。想象一下,你想在你的應用程序的某些部分輸出最近的評論:

  • 與當前的設計,你顯示的信息,並有像url/viewComment/commentId={commentId}鏈接。
  • 如果評論是識別與articleIdcommentInternalId,如(1型)的所有URL將需要兩個IDS

一種方法來生成id是:

(COUNT(1) FROM `comments` WHERE article = {article}) + 1 

,但它顯然更復雜而且使用自動增量的代價很高。