Abrufen von Indizes für Fremdschlüssel durch Hibernate

9

Ich verwende Hibernate 3.3.2 in einem ziemlich großen Projekt mit PostgreSQL 8.4 mit PostgreSQLDialect.

Wie wir unsere Beziehungen aufgebaut haben, führen wir eine Menge Suchen nach den Fremdschlüsselattributen unserer Tabellen durch.

Aus Leistungsgründen möchte ich Hibernate Indizes zu allen Fremdschlüsselspalten hinzufügen, wenn wir unsere Tabellen mit hbm2dll.auto erstellen.

MySQL fügt diesen Spalten automatisch Indizes hinzu, aber in Postgres scheint es keine Möglichkeit zu geben, dies zu tun.

Gibt es eine Option, die ich irgendwo einstellen kann, oder etwas, das ich meinen hbm.xml-Dateien hinzufügen kann, um dies zu ermöglichen?

    
biggusjimmus 03.06.2010, 22:17
quelle

4 Antworten

2

Hibernate erzwingt nur die Indexerstellung für MySQL, nicht für PostgreSQL, Oracle usw. MySQL erlaubt keine Fremdschlüssel ohne Index, andere Datenbanken haben diese Einschränkung nicht.

Sybase hat eine Erklärung , warum es eine gute Sache ist, sich nicht durchzusetzen Indizes, das Hibernate-Forum hat auch ein Thema darüber (Oracle bezogen) einschließlich einer Problemumgehung. Bevor Sie jedoch mit der Erstellung einer großen Anzahl von Indizes beginnen, sollten Sie prüfen, ob Sie alle diese Indizes benötigen. In vielen Fällen können die Indizes mit anderen kombiniert werden, um die Geschwindigkeit zu erhöhen. Es hängt alles ab!

Verwenden Sie EXPLAIN für Ihre Abfragen, um zu sehen, wie die Datenbank sie ausführt, welche Indizes verwendet werden, wo Indizes fehlen usw.

    
Frank Heikens 04.06.2010 06:51
quelle
2

Hier ist eine schnell-und-dirty Abfrage, die die DDL für Indizes für jeden definierten Fremdschlüssel in einem Schema generieren würde:

%Vor%

Dies wurde nur in PostgreSQL 8.4 getestet, aber ich denke, es sollte in den meisten 8.x-Versionen funktionieren.

Beachten Sie auch, dass dies nicht erkennt, welche bereits von einem Index abgedeckt sind, so dass Sie wahrscheinlich einige Duplikate haben.

    
Matthew Wood 04.06.2010 17:57
quelle
1

Probieren Sie eine der folgenden Möglichkeiten aus:

%Vor%     
Konrad Garus 04.06.2010 07:01
quelle
-1

Zusätzlich zu Matthews Antwort: Hinzufügen von

%Vor%

direkt vor dem Semikolon erstellt nur Indizes, wenn sie nicht existieren. Dadurch können Sie die Anweisung wiederholt ausführen, ohne dass "relation fk _..." bereits vorhanden ist "Fehler.

    
Roben 21.06.2012 13:28
quelle