【问题标题】:Need to put @Index even when I marked with @Column(unique=true)?即使我用@Column(unique = true)标记也需要放置@Index?
【发布时间】:2026-02-08 15:50:01
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: java sql mysql hibernate jpa


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      然后它被休眠转换为以下 DDL 唯一的(user_id)

      当您查询 mysql 数据库并执行 显示索引来自 它将 user_id 显示为索引字段,因此答案是 @unique 足以使该字段被索引

      HTH

      【讨论】: