假設這是表的SQL代碼:MySQL:我應該在這個表中創建什麼樣的索引?
CREATE TABLE `user_is_in` (
`id_user` INT NULL ,
`id_city` INT NULL ,
`when` DATETIME NULL ,
INDEX `fk_user` (`id_user` ASC) ,
INDEX `fk_city` (`id_city` ASC) ,
CONSTRAINT `fk_user`
FOREIGN KEY (`id_user`)
REFERENCES `user` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_city`
FOREIGN KEY (`id_city`)
REFERENCES `city` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE)
ENGINE = InnoDB;
使用該表是存儲的一種Foursquare的簽到(A用戶在同一時間註冊在一個地方)。
現在我有兩個選擇:
創建具有3個字段,並沒有主鍵的唯一索引:
UNIQUE INDEX
id_user_is_in_UNIQUE
(id_user
ASC,id_city
ASC,when
ASC)創建一個額外的經典id自動增量字段
,因爲我想創建了用戶和城市查詢(即:搜索誰做了一個簽入的所有用戶在一個城市的一個日期)
感謝事先我不喜歡第二個選項。
如果此表將用作任何其他表中的外鍵,那麼最好使用auto_increment int字段。否則,你將不得不在每個外表中拖動用戶/城市/字段,這會非常迅速地變得非常痛苦。 – 2012-04-19 14:14:39
你希望我們做什麼 – 2012-04-19 14:15:08
對不起,我只是想索引建立哪種類型的建議。而Marc,這個表有2個fk,但沒有其他表有外鍵。 – jorgeas80 2012-04-19 18:07:34