您是不是需要在 Hibernate 表的 @id 列上创建索引

Posted

技术标签:

【中文标题】您是不是需要在 Hibernate 表的 @id 列上创建索引【英文标题】:Do you need to create index on the @id column of a Hibernate table您是否需要在 Hibernate 表的 @id 列上创建索引 【发布时间】:2013-01-01 22:22:03 【问题描述】:

我是否需要为休眠表的主键添加索引注释以获得良好的性能,我认为用@id 标记字段意味着创建了索引

@Id
private String guid;

但我没有注意到在生成的 ddl 中创建了任何东西

但是如果我添加了@index 注释

@Id
@org.hibernate.annotations.Index(name = "IDX_GUID")
private String guid;

然后我注意到在 DDL 中创建了一个索引。

所以我认为我需要为每个表都这样做,但我的一部分认为这真的有必要,因为 hibernate 肯定会希望为主键创建索引作为起点?

【问题讨论】:

【参考方案1】:

您不必显式创建索引。而不是看到 DDL 语句;我会建议你检查 hibernate 创建的最终模式。索引是作为 create table 语句的一部分创建的。

【讨论】:

@Deepak,只是为了确认我的理解,您是说索引创建不作为 DDL (hbm2ddl) 导出过程的一部分处理吗?如果是这样,那将使 DDL 在很大程度上无用,还是我在这里遗漏了什么?谢谢 @paulkmoore 我们可以通过两种方式创建索引;即。 “创建索引...”或在创建表时我们可以指定.. 我要说的是,在这种情况下,主键上的索引是在创建表时创建的。 @Deepak,好的,谢谢,我错过了主键索引和其他(一般)索引之间的区别。感谢您的帮助。 另见 - Table - indexes

以上是关于您是不是需要在 Hibernate 表的 @id 列上创建索引的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate在oracle中ID增长的方式(续)

如何使用 Hibernate 和 postgresql 为一对多关系实现每个表的自动递增 id 字段

[Hibernate] One-To-Many

hibernate通过注解实现实体和表的映射

如何在JPA / JAVA / Hibernate的两列中插入自动生成的ID

Hibernate注解