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?
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.
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.
Tags und Links hibernate postgresql indexing foreign-keys