Ich habe eine Tabelle Term mit etwas mehr als 5 Millionen Zeilen. Jede Zeile besteht aus einer ID und einem "Namen". Eine Suche mit dem Feld "Name" dauert fast 35 Sekunden.Erstellt Hibernate automatisch Index?
MariaDB [WordDS]> select * from Term where name="Google";
+---------+--------+
| id | name |
+---------+--------+
| 1092923 | Google |
+---------+--------+
1 row in set (35.35 sec)
Das Skript aus der von Hibernate generierte Tabelle:
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 Anmerkung:
@Id
@Column(unique=true)
private long id;
@NotNull
@Size(min = 1, max = 100)
private String name;
Es ist so langsam auf dem Feld "Namen" zu suchen, so dass ich denke, es ist kein Index. Erstellt Hibernate automatisch Index für ID und Name in dieser Tabelle? Wenn nicht, wie lässt man Index für beide erstellen?
Muss ich auf die column ‚id‘ hinzufügen? Oder Primärschlüssel "ID" wird automatisch indiziert. – user697911
Guter Fang habe ich aktualisiert. –
Warum haben Sie nur einen Namen = "name_idx"? Brauchen Sie einen anderen Namen für den Index 'id'? – user697911