У меня есть таблица Term с чуть более 5 миллионов строк. Каждая строка состоит из идентификатора и имени. Поиск с полем «имя» занимает почти 35 секунд.Hibernate автоматически создает индекс?
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 автоматически создает индекс для идентификатора и имени в этой таблице? Если нет, то как это сделать, чтобы создать индекс для обоих?
Мне нужно добавить «идентификатор» в columnList Do? Или первичный ключ «id» будет автоматически проиндексирован. – user697911
Хороший улов, который я обновил. –
Почему у вас есть только одно имя = "name_idx"? Вам нужно другое имя для индекса id? – user697911