MySQL:我应该在这个表中创建什么样的索引?
假设这是表的SQL代码:MySQL:我应该在这个表中创建什么样的索引?,mysql,indexing,Mysql,Indexing,假设这是表的SQL代码: 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` ) REFERENCE
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签入(用户一次在一个地方注册)
现在我有两个选择:
- 创建一个包含3个字段且没有主键的唯一索引:
唯一索引
id\u user\u是唯一的(
ASC,id\u user
ASC,id\u city
ASC)when
- 创建一个额外的经典id自动增量字段
提前谢谢。你应该同时做这两件事。添加自动递增的主键,并针对所有三列添加唯一性约束。如果最终需要,使用单独的系统分配键,您可以更轻松地为此新表定义外键。对所有三列都具有唯一性约束将确保不会创建重复数据 一些简短的旁注:
- 因为这是一个关联表,所以列实际上应该是
不为空
- 你可能想把一个城市的所有信息级联到 关联表