Hibernate会自动创建索引吗?

时间:2016-03-30 04:32:22

标签: mysql hibernate

我有一个表格,行数超过500万行。每行包含一个ID和一个" name"。使用"名称"进行搜索这个领域需要将近35秒。

MariaDB [WordDS]> select * from Term where name="Google";
+---------+--------+
| id      | name   |
+---------+--------+
| 1092923 | Google |
+---------+--------+
1 row in set (35.35 sec)

Hibernate生成的表中的脚本:

DROP TABLE IF EXISTS `Term`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Term` (
  `id` bigint(20) NOT NULL,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

Java注释:

@Id
@Column(unique=true)
private long id;

@NotNull
@Size(min = 1, max = 100)
private String name;

搜索字段"名称"这么慢,所以我猜没有索引。 Hibernate会自动在此表中的id和name上创建索引吗?如果没有,如何让它为两者创建索引?

2 个答案:

答案 0 :(得分:2)

使用@Index注释:

@Entity
@Table(name = "Term", indexes = {
    @Index(columnList = "name, id", name = "name_idx") })

Hibernate将在启动时创建表时自动创建索引。

答案 1 :(得分:1)

主键自动编入索引,对于name字段,您必须添加@Index注释:

@NotNull
@Size(min = 1, max = 100)
@Index(name = "idx_name")
private String name;