即使我用@Column(unique = true)标记,也需要输入@Index?

时间:2010-10-25 23:57:06

标签: java sql mysql hibernate jpa

即使我用@Column(unique = true)标记,也需要输入@Index?

我有一个经常用于检索实体的属性,并希望将其作为数据库的索引列。所以这个属性已经标有@Column(unique = true),我需要把@Index?

感谢

2 个答案:

答案 0 :(得分:3)

大多数数据库使用UNIQUE实现UNIQUE INDEX约束,但它们不是必需的,UNIQUE约束不一定能为您带来索引的好处。从理论上讲,查询规划器不会考虑约束,而索引则不会。

那就是说,在MySQL的特殊情况下,它似乎是a UNIQUE constraint and a UNIQUE INDEX are "synonymous"

但是您应该通过检查查询计划来确认。

答案 1 :(得分:0)

我认为你使用的是mysql,因为问题是用mysql标记的

如果您正在使用注释和类似的东西 @Column(unique = true)

然后通过hibernate将其转换为以下DDL unique(user_id)

当你查询mysql db并做 显示索引来自 它会将user_id显示为索引字段,因此答案是@unique足以将字段编入索引

HTH